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
在IE10querySelectorAll
中抛出了一个错误,返回的是一个节点列表,而不是一个数组。对于NodeList
s,没有forEach
方法。此外,循环所有元素并绑定事件是一个糟糕的建议。由于mouseweel
冒泡,一个capture flag=true的mouseweel
事件也可以完成这项工作。您应该了解不同浏览器的变化。