更新大卫建议的工作修复(见下文):
代替
$('.scrollMe').bind("mousewheel DOMMouseScroll", ...)
和
$('.scrollMe').bind("mousewheel DOMMouseScroll MozMousePixelScroll", ...)
原帖
Firefox 16.0.2(最新)在绑定“mousewheel / DOMMouseScroll”事件时出现问题。当鼠标指针位于我的目标 div 顶部时使用鼠标滚轮滚动会导致窗口也滚动 - 而我显然不希望这样。
我尝试添加几种方法来停止传播等,但似乎没有任何效果。
Javascript代码:
$(document).ready(function() {
$('.scrollMe').bind("mousewheel DOMMouseScroll", function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
var delta = parseInt(e.originalEvent.wheelDelta || -e.originalEvent.detail);
$(this).empty();
return false;
});
});
要查看它的实际效果,请点击下面的 jsFiddle 链接。在示例页面上,只需将鼠标指针放在带有红色框的 div 内,然后使用鼠标的滚轮。Firefox 将第一次滚动父窗口(出乎意料),而其他浏览器则不会。
奇怪的是,一旦您在绑定元素上触发事件,Firefox 就不会重复该行为,这意味着它会停止滚动页面。但是,在您手动滚动页面并重试后,它确实会重复此行为。
我也在 IE9 和 Chrome 中对此进行了测试,但在这些浏览器中无法检测到这个问题(这意味着它们不会意外滚动窗口),所以我猜它是 Firefox 特定的(也禁用了 Firefox 等中的每个插件。 )
这真的是 Firefox 中的一个错误吗(如果是这样,是否有一个跨浏览器黑客可以解决问题)?或者,如果您知道任何其他解决方案可以在没有页面窗口滚动的情况下实现捕获鼠标滚轮事件的相同效果,请随时回答!