Firefox中目前无法检测鼠标滚轮事件。

3

出现问题的原因是我无法在Firefox中识别鼠标滚轮事件。这在IE,Chrome,Safari,Opera中可以正常工作,但在FF中无法识别。我正在DOMMouseScroll上附加事件监听器,这应该在FF中被识别。

Fiddle演示

$(document).unbind('mousewheel DOMMouseScroll').on('mousewheel DOMMouseScroll', function(e) {
    var evt = event || e || window.event;
    var delta = evt.detail < 0 || evt.wheelDelta > 0 ? 1 : -1;

    if (delta < 0) {
        // scroll down
    } else {
        // scroll up
    }
});
2个回答

14

您的代码在控制台中生成了一个错误。该行:

var evt = event || e || window.event;

是不正确的;范围内没有 "event" 变量。您可以直接使用 "e"。jQuery 代码将确保您的处理程序作为参数获取事件参数。或者:

$(document).unbind('mousewheel DOMMouseScroll').on('mousewheel DOMMouseScroll', function(evt) {
    var delta = evt.detail < 0 || evt.wheelDelta > 0 ? 1 : -1;

    if (delta < 0) {
        // scroll down
    } else {
        // scroll up
    }
});

你知道为什么这个解决方案无法向上滚动吗? - bob_cobb
1
我脑海里没有,我会检查一下代码片段。 - Pointy
谢谢.. 是的,这真的很奇怪,它只是把所有东西都搞糟了。 - bob_cobb
2
这是因为jQuery事件对象包装器上没有“detail”属性 - 您必须查看evt.originalEvent.detail才能看到它:http://jsfiddle.net/yDdXs/ - Pointy
7
jQuery 1.9.1: var delta = event.originalEvent.detail < 0 || event.originalEvent.wheelDelta > 0 ? 1 : -1; - Vojtiik
显示剩余3条评论

3

这段代码救了我的命.. 在Chrome、Firefox、Edge、Internet Explorer和Opera中都可以工作...

window.addEventListener('wheel', function(event){
if(event.deltaY < 0){
// wheeled up
}
else {
// wheeled down
}
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接