javascript - 滚动函数触发多次而不是一次

标签 javascript jquery arrays scroll infinite-scroll

我正在尝试创建一个网站,该网站会在一次滚动操作后自动滚动到每个部分。这意味着代码必须检查页面是向上滚动还是向下滚动。我相信下面的代码解决了我的问题,但是在页面滚动时滚动操作被触发了不止一次。您会看到 if 语句中的第一个警报达到 5,而不是所需的 1。非常感谢任何有关此事的帮助。

[注意] 我正在使用 velocity.js 库滚动到容器中的每个部分。

var page = $("#content-container");
var home = $("#home-layer-bottom");
var musicians = $("#musicians");
var athletes = $("#athletes");
var politics = $("#politics");
var bio = $("#politics");
var pages = [ home,musicians,athletes,politics,bio ];

var pageCur = 0;


var lastScrollTop = 0;
page.scroll(function(){

var st = $(this).scrollTop();
var pageNex = pageCur + 1;

if (st > lastScrollTop){
    alert(pageNex);
pages[pageNex].velocity("scroll", { container: $("#content-container") });
} else {
   alert(pageCur-1);
pages[pageCur-1].velocity("scroll", { container: $("#content-container") });
}
lastScrollTop = st;
pageCur = pageNex;
});

最佳答案

当用户执行此操作时,滚动事件(以及调整大小事件)会触发多次。为此,最佳做法是 debounce .但是,我从来没有让它发挥作用。相反,我使用全局 bool 值来检查函数是否已触发。

var scrolled = false;
page.on('scroll', function(){
    if(!scrolled){
        scrolled = true;
        //do stuff that should take a while...
        scrolled = false;
    };
});

关于javascript - 滚动函数触发多次而不是一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822077/

相关文章:

javascript - jQuery 方法无法将数据传递到 REST 服务器

javascript - 如何复制GMail的拖放标签功能?

javascript - 如何在单击元素后保持悬停样式? (jQuery)

jquery - 迭代 <li> 并用 jquery 替换文本

javascript - 无法访问数组的元素

javascript - 如何循环遍历所有对象数组?

javascript - 如何为html类添加事件监听器?

javascript - 返回一个表示图像为 JSON 的 byte[]?

javascript - 如何从变量动态调用工厂方法?

arrays - 如何获取对数组中对象的引用