我编写了一个小函数,以使页面很好地滚动到下一个div。

滚动似乎是有效的,但前提是用户仅使用鼠标滚轮滚动一步,而滚轮滚动的频率比踩踏频率高的多时,它将不再适用于下一个div /中断这一切。我设置了一个小提琴来演示这种行为:

DEMO

javascript代码如下所示:

var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" ;

     $('#start').bind(mousewheelevt, function(e){

     var evt = window.event || e ;
     evt = evt.originalEvent ? evt.originalEvent : evt;
     var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta;

     if(delta < 0)
     {


     $('html, body').animate({
     scrollTop: $('#hotels').offset().top
     }, 2000);

     }
     });

     var mousewheelevt1 = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" ;

     $('#hotels').bind(mousewheelevt1, function(e){

     var evt = window.event || e ;
     evt = evt.originalEvent ? evt.originalEvent : evt;
     var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta;

     if(delta < 0)
     {
     $('html, body').animate({
     scrollTop: $('#training').offset().top
     }, 2000);

     }
     else {
     $('html, body').animate({
     scrollTop: $('#start').offset().top
     }, 2000);

     }
     });
   var mousewheelevt2 = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" ;

     $('#training').bind(mousewheelevt2, function(e){

     var evt = window.event || e ;
     evt = evt.originalEvent ? evt.originalEvent : evt;
     var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta;

     if(delta < 0)
     {


     }
     else {
     $('html, body').animate({
     scrollTop: $('#hotels').offset().top
     }, 2000);

     }
     });


有没有一种方法可以在第一个事件触发后禁用鼠标滚轮,或者您对解决该问题还有其他想法吗?

最佳答案

.stop().animate()做到了。

FIDDLE

如果要消除闪烁,还应该使用e.preventDefault()禁用默认的鼠标滚轮事件。

关于javascript - 鼠标滚轮事件触发次数过多/许多滚动会中断动画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27065320/

10-10 11:22