javascript - jQuery 滚动事件每次滚动触发一次

标签 javascript jquery scroll

我有一些 jQuery 代码来检查我是否已滚动到窗口底部。

$(window).scroll(function(){
    if($(window).scrollTop() + $(window).height() == $(document).height()) {
        appendToGrid();
    }
})

我的appendToGrid()函数将用户滚动到页面顶部并添加内容。问题是,我需要每个滚动调用一次这个函数。正如我现在所拥有的,每个滚动都会多次调用它。

如果我把它改成

$(window).one('scroll',function() {
    if($(window).scrollTop() + $(window).height() == $(document).height()) {
        appendToGrid();
    }
});

它总共只会触发一次,但我需要它每次滚动时触发一次,以便用户可以滚动到底部并继续发送回页面顶部。

我也尝试过以下方法,但它仍然会触发多次。

var fired = false;
$(window).scroll(function(){
    if($(window).scrollTop() + $(window).height() == $(document).height() && !fired) {
        fired = true;
        appendToGrid();
        fired = false;
    }
})

最佳答案

一旦调用appendToGrid,您就可以添加一个冷却计时器。这与您的 fired 标志类似,但它仅在 2000 毫秒等待后重置。您可以将时间调整为感觉最好的时间。

var recentScroll = false;
$(window).on('scroll',function() {
    if(!recentScroll && $(window).scrollTop() + $(window).height() == $(document).height()) {
        appendToGrid();
        recentScroll = true;
        window.setTimeout(() => { recentScroll = false; }, 2000)
    }
});

关于javascript - jQuery 滚动事件每次滚动触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212809/

相关文章:

javascript - 如何将过期 header 添加到 Meteor 静态 Assets

android - 如何判断一个WebView是否一直缩小

javascript - 滚动到目标部分时更改按钮的颜色

datetime - mobiscroll 的开源替代品

javascript - 执行某种淡入淡出的功能所涉及的机制/算法是什么?

JavaScript 使用逗号访问数组

php - 在没有内容的自定义帖子类型上使用 TinyMCE

javascript - (Object object) 没有方法效果

javascript - 未使用 ajax 从 Jquery 对话框调用 Controller 后操作

jQuery 树遍历 - 将无序列表元素嵌套到 JSON