event.preventDefault();不在Firefox中停止鼠标滚轮

时间:2012-09-07 08:23:35

标签: jquery mousewheel preventdefault

我在jquery中使用鼠标滚轮来增加div的数量,数字正确增加但是在Firefox中没有停止滚动。

$(document).ready(function(){

    $('#test').bind('mousewheel DOMMouseScroll', function(event){

        var currentValue = parseInt($('#test').text(),10),
            newValue = currentValue + 1;

        $('#test').text(newValue);    
        event.preventDefault();
    });
});

小提琴:http://jsfiddle.net/rHVUn/

小提琴使用标准鼠标滚轮检测,但我也使用了Brandon Aaron的鼠标滚轮插件,它也有同样的问题。

删除更新文本的行(我也尝试过html())会解决问题,但这是代码的一个重要部分,无法删除。

有谁知道如何解决这个问题?

谢谢

更新:我发现问题只发生在我的鼠标直接放在文本上方,如果我的鼠标在框内而不是在文本上(在填充内)滚动停止

7 个答案:

答案 0 :(得分:2)

尽管阻止了滚动事件,但当我搜索Firefox滚动问题时,这仍然是最热门的帖子之一。

Firefox会在鼠标滚动时触发两个事件:DOMMouseScrollMozMousePixelScroll。请参阅https://github.com/jquery/jquery-mousewheel/issues/45#issuecomment-11749359有必要阻止MozMousePixelScroll事件。

根据https://developer.mozilla.org/en-US/docs/Web/Events/MozMousePixelScroll,最现代的事件名称是wheel,它似乎适用于我的Firefox(55)和Chrome(61)版本。可能这是你应该使用的。见https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent

这是一个JSFiddle:

https://jsfiddle.net/ahpy9f66/

答案 1 :(得分:1)

试试这个

$(document).ready(function(){

    $('#test').bind('mousewheel DOMMouseScroll', function(event){

        var currentValue = parseInt($('#test').text(),10),
            newValue = currentValue + 1;

        $('#test').text(newValue);    
        return false;
    });
});

答案 2 :(得分:1)

我找到了解决问题的方法,但这可能不是最好的方法,但它有效。

我发现问题只发生在滚动过程中我的鼠标直接放在文本上方,所以我添加了一个重叠元素并将其用作鼠标滚轮触发器。

小提琴:http://jsfiddle.net/rHVUn/9/
(不需要背景颜色)

答案 3 :(得分:0)

这适用于chrome,firefox lattest版本和IE,Try this

document.onmousewheel = function(){ stopWheel(); } /* IE7, IE8 */
if(document.addEventListener){ /* Chrome, Safari, Firefox */
    document.addEventListener('DOMMouseScroll', stopWheel, false);
}
 
function stopWheel(e){
    if(!e){ e = window.event; } /* IE7, IE8, Chrome, Safari */
    if(e.preventDefault) { e.preventDefault(); } /* Chrome, Safari, Firefox */
    e.returnValue = false; /* IE7, IE8 */
}
div {
    float:left;
    width:25px;
    height:25px;;
    text-align:center;
    margin:5px;
    padding:5px;
    border:1px solid #bbb;
}
#test_ov {
    position:absolute;
    background:rgba(45,65,40,0.3);
}
<div style="height:900px; border:0;">
    <div id="test">0</div>
    <span id="test_ov"></span>
</div>

答案 4 :(得分:0)

没有一个答案对我有用,但是event.stopImmediatePropagation()有用。

引用:https://stackoverflow.com/a/63609840/10830621

答案 5 :(得分:-1)

您是否尝试过绑定'mousewheel'事件而不是您拥有的事件? :

$('#test').bind('mousewheel', function(event){ ...

我调整了你的小提琴,似乎有效

答案 6 :(得分:-1)

$('#objectId').on({
            'mousewheel': function(e) {                
                e.preventDefault();
                e.stopPropagation();
                }
            })

请改用它,这对我有用