如何停止scroll()多次触发事件

时间:2015-04-15 15:24:42

标签: jquery

我使用jquery.visible.js来检测DIV何时在视图中(它在插件上启动动画,就像圆形动画效果一样)。但它每次使用滚轮时都会继续发射,无限期地增加自身,我无法找到一种方法来停止它()或取消绑定()?谢谢!

 // Check vertical for circliful using jquery.visible.js
$(window).scroll(function(){
    if ($("#moreSection").visible(true)){


        // trigger circliful
        $('#myStat-1').circliful() // this wont stop firing

}
});

2 个答案:

答案 0 :(得分:4)

正如#Shikkediel所指出的那样,scroll()会因帧率变化而被解雇。所以每个卷轴都可以触发数百次。

你可以这样做:

$(window).scroll(function(){
    if ($("#moreSection").visible(true)){
        doActionAndStopScript();
    }
});

function doActionAndStopScript(){
    $('#myStat-1').circliful() // now it will fire once
    $(window).unbind('scroll');
}

您只能在unbind()

之外拨打$(window)

答案 1 :(得分:3)

对于滚动的每个像素,scroll事件将触发一次。要解决此问题,您可以使用一个计时器,该计时器仅在滚动停止x毫秒后执行逻辑。试试这个:

var timer;
$(window).scroll(function() {
    clearTimeout(timer);
    timer = setTimeout(function() {
        if ($("#moreSection").visible(true)){
            $('#myStat-1').circliful();
        }
    }, 250);
});

250ms通常足够长,等待启动代码。您可以根据需要调整此值。