处理元素后面的鼠标事件

时间:2011-08-23 18:28:27

标签: javascript events mootools mouse

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

在Firefox中,我通过将“pointer-events:none”样式应用于ghost来修复此问题,这会导致鼠标滚轮事件直接通过,就像我想要的那样。但似乎我需要一个不同的IE解决方案。我计划在ghost元素上捕捉mousewheel事件并将它们转发到容器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);
    });

但没有运气,有些东西仍然缺失。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

相关问题