Jquery window 滚动。只打电话一次

Jquery window scroll. call just one time

您好,我有一个关于 jquery window 滚动功能的问题。我有这样的代码。

$(window).scroll(function(){
        if($(window).scrollTop() > $(".pages").offset().top) {
            $('.top-slider').slick('slickPause');
        }else {
            $('.top-slider').slick('slickPlay');
        }
    });

好的,每次滚动时,如果 first 为真,它会调用每滚动 1 像素 window。这种方法是否只调用一次如果为真但检查滚动如果其他为真只调用一次?

感谢您的回答:)

尝试使用标志,如下所示:

var paused = false;

$(window).scroll(function(){
    if( $(window).scrollTop() > $(".pages").offset().top ) {
        if( !paused ){
            $('.top-slider').slick('slickPause');
            paused = true;
        }        
    }else {
        if( paused ){
            $('.top-slider').slick('slickPlay');
            paused = false;
        }
    }
});

添加测试变量将是这里的解决方案:

var checkDown = true; 
var checkUp   = false;
$(window).scroll(function(){
    if($(window).scrollTop() > $(".pages").offset().top && checkDown ) {
        $('.top-slider').slick('slickPause');
        checkDown = false;
        checkUp   = true;
    }else if(checkUp) {
        $('.top-slider').slick('slickPlay');
        checkDown = true;
        checkUp   = false;
    }
});

我告诉你另一个解决方案,是去抖动器。去抖功能使滚动和调整事件更有效,因为停止事件触发直到第一个触发事件结束。

您可以使用 underscore.js 库查看去抖功能。

http://underscorejs.org/#debounce

使用简单:

var debounced = _.debounce(myFunction, 1000);
$(window).scroll(debounced);