【问题标题】:How to accept D&D for div, but propagate clicks?如何接受 div 的 D&D,但传播点击?
【发布时间】:2020-11-12 12:54:11
【问题描述】:

我有一个全尺寸的 Windows div 容器,它对传入的文件拖放事件作出反应。

<div id="drag-overlay">
  <div id="drag-overlay-text">This is shown while drag is active...</div>
</div>

不幸的是,容器不再将点击传播到按钮等底层对象。是否有一个简单的 CSS 修复,或者我需要在 div 容器上注册一个点击处理程序并手动传播点击/拖动?后者真的不是一个好的解决方案

#drag-overlay {
  position: absolute;
  top: 0;
  z-index: 1;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  width: 100%;
  opacity: 0;
}

拖放处理程序的注册:

var holder = document.getElementById('drag-overlay');
holder.ondragover = () => { ...
holder.ondragleave = () => { ...
holder.ondragend = () => { ...
holder.ondrop = (e: DragEvent) => { ...
...

【问题讨论】:

    标签: html css node.js


    【解决方案1】:

    我猜问题是按钮在技术上“在”drag-overlay 的“下方”,因为它是绝对定位的,所以对它们的任何操作都不能是 seen

    由于您没有发布很多代码,我将这个工作示例放在一起,显示将按钮放在#drag-overlay 之外,并且绝对将其定位为比#drag-overlay 更高的 z-index。

    var btn = document.querySelector("button");
    
    btn.addEventListener("click", function(e) {
      e.preventDefault();
      console.log("click");
    });
    #drag-overlay {
      position: absolute;
      top: 0;
      z-index: 1;
      bottom: 0;
      left: 0;
      right: 0;
      height: 100%;
      width: 100%;
      opacity: 0;
    }
    
    button {
      position: absolute;
      top: 0;
      z-index: 2;
      left: 0;
      right: 0;
    }
    <button>TEST</button>
    <div id="drag-overlay">
      <div id="drag-overlay-text">This is shown while drag is active...</div>
    </div>

    【讨论】:

    • 非常感谢!这就是问题所在,这只能通过将按钮/点击消耗品放在更高的 z-index 上来解决吗?
    • @DanielStephens,从另一个角度来看,在 3D 空间中,您的按钮上方有一块玻璃。当然,您可以透过玻璃看到按钮,但那个物体仍然会阻止您访问这些按钮。
    • 但这仅适用于真实对象。 CSS是虚拟的,可能吗?有一些东西可以解决这个问题,只是好奇
    • @DanielStephens 这是一个类比,可以理解为什么占据屏幕 100% 并放置在最高点(z-index)的元素会阻止与其下方所有元素的交互。将 Z-index 视为分层,如果您在最顶层有一个元素,则它下面的任何内容都无法访问。
    • 哦,我完全明白了!但如前所述,我真的认为会有一个解决方法。从技术上讲,我看不出图层允许单击事件的原因,而拖动事件由“注册”拖动事件处理程序处理
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2021-10-18
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多