Javascript 如何捕获onMouseWheel事件并阻止其在其他地方处理

Javascript 如何捕获onMouseWheel事件并阻止其在其他地方处理,javascript,html,Javascript,Html,我想捕获整个页面的onmouseheel事件(对于我正在进行自定义滚动的上下文),但也需要停止页面上处理它的所有其他内容。这怎么可能呢 提前谢谢。你应该打电话来 event.preventDefault(); 在处理事件之后 像这样: window.addEventListener("onMouseWheel", function(event) { // process the event for custom scrolling event.preventDefault()

我想捕获整个页面的
onmouseheel
事件(对于我正在进行自定义滚动的上下文),但也需要停止页面上处理它的所有其他内容。这怎么可能呢

提前谢谢。

你应该打电话来

event.preventDefault();
在处理事件之后

像这样:

window.addEventListener("onMouseWheel", function(event) {
    // process the event for custom scrolling

    event.preventDefault();
    event.stopPropagation();
}, true);

您可以在jquery中这样做:

$(function(){
    $('*:not(body)').on('mousewheel',function(e){
        e.preventDefault();
        e.stopPropagation();
    });
});
使用纯javascript的替代解决方案:

var ele = document.querySelectorAll('*:not(body)');
ele.forEach(function(i){
    ele[i].addEventListener('mousewheel',function(e){
        e.preventDefault();
        e.stopPropagation();
    },false);
});

您还应该调用
event.stopPropagation()如果要停止事件冒泡(以便该事件实际上不由树中的其他事件mousewheel事件侦听器处理).@RobW window不是最顶层的侦听器吗?如果事件是在主体中的一个元素上触发的-一个具有事件处理程序的元素-那么该事件处理程序将在事件冒泡到
窗口之前被调用。他已经在他的元素中处理了,如问题中所述。@ATOzTOA在您的示例中,该事件在气泡阶段发生。然后,
stopPropagation()
确实是不需要的,因为
window
位于树的末尾。但是,在冒泡阶段绑定事件意味着树中较低级别的方法可以调用
stopPropagation()
,从而防止触发全局事件侦听器。通过将事件绑定到捕获阶段,
stopPropagation()
是相关的,请尝试以下示例:他想要JavaScript解决方案。不幸的是,
.forEach
在IE10
querySelectorAll
中抛出了一个错误,返回的是一个
节点列表,而不是一个数组。对于
NodeList
s,没有
forEach
方法。此外,循环所有元素并绑定事件是一个糟糕的建议。由于
mouseweel
冒泡,一个capture flag=true的
mouseweel
事件也可以完成这项工作。您应该了解不同浏览器的变化。