滚动功能触发多次而不是一次

And*_*aro 1 javascript arrays jquery 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;
});
Run Code Online (Sandbox Code Playgroud)

Jar*_*dCS 10

这对我有用!

var ScrollDebounce = true;
$('.class').on('scroll',
function () {
if (ScrollDebounce) {
ScrollDebounce = false;

//do stuff    

setTimeout(function () { ScrollDebounce = true; }, 500);
}
})
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效!谢谢。顺便说一句,你的名字看起来很熟悉。看起来像是来自 usj-r 菲律宾 (2认同)

Don*_*ato 6

用户执行此操作时,滚动事件(以及调整大小事件)会多次触发。为此,最佳做法是消除抖动。但是,我从来没有使它起作用。相反,我使用一个全局布尔值来检查该函数是否已触发。

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

  • 工作完美。刚刚添加了setTimeout,它会在滚动500毫秒后运行,以使scrolled = false。 (3认同)