处理元素后面的鼠标事件

Handling Mouse Events Behind An Element

本文关键字:鼠标 事件 元素 处理      更新时间:2023-09-26

我正在使用Mootools实现一个拖放界面,其中创建了被拖动元素的幽灵副本,并随鼠标移动。我希望用户能够使用鼠标滚轮滚动,同时保持这个幽灵元素。问题是幽灵本身正在吸收鼠标滚轮事件,导致它不滚动它后面的页面(在这种情况下,一个带有滚动条的特定div)。

在Firefox中,我通过对幽灵应用"pointer-events: none"样式来解决这个问题,这导致鼠标滚轮事件像我想要的那样直接通过。但似乎我需要一个不同的解决方案的IE。我计划在ghost元素上捕获鼠标滚轮事件并将它们转发到容器div,但我似乎无法使新事件触发标准鼠标滚轮行为(即:滚动div)。有人知道我该怎么做吗?

下面是我正在谈论的一个非常基本的例子:http://jsfiddle.net/jqL8Z/3/

注意,如果你把鼠标滚轮放到"拖动元素"上,页面不会滚动。这是因为滚动是主div溢出的一部分,而拖动框不是该div的成员,因此它的鼠标事件将冒泡到主体。我不想让它成为div的成员因为这样拖出div时它就不可见了

我尝试了以下代码来捕获和重定向事件:

textClone.addEvent('mousewheel', function(e) {
        var mouseWheelEvent = document.createEvent('MouseEvents');
        mouseWheelEvent.initMouseEvent('mousewheel', true, true, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
        treeDiv.dispatchEvent(mouseWheelEvent);
    });

通过调用页面的鼠标滚轮事件来响应div的鼠标滚轮事件可能会实现您的目标。

我最终做的是改变我的拖放逻辑,将幽灵div保持在鼠标的一侧,而不是在它的下方。这样它就不会捕获任何鼠标事件。