Javascript scrolltop检测多次滚动

Javascript scrolltop检测多次滚动,javascript,events,scroll,scrolltop,Javascript,Events,Scroll,Scrolltop,Im使用以下示例来检测滚动的方向。然而,它似乎对每一个滚动动作都起作用。有没有办法让它只在方向改变时运行 var lastScrollTop = 0; $(window).scroll(function(event){ var st = $(this).scrollTop(); if (st > lastScrollTop){ // downscroll code } else { // upscroll code } lastScr

Im使用以下示例来检测滚动的方向。然而,它似乎对每一个滚动动作都起作用。有没有办法让它只在方向改变时运行

var lastScrollTop = 0;
$(window).scroll(function(event){
   var st = $(this).scrollTop();
   if (st > lastScrollTop){
       // downscroll code
   } else {
      // upscroll code
   }
   lastScrollTop = st;
});

当然。只需使用一个占位符变量来跟踪最后一个行驶方向,如果匹配,则返回false

var lastScrollTop = 0;
var lastDirection = "";
$(window).scroll(function (event) {
    var st = $(this).scrollTop();
    if (st > lastScrollTop) {
        lastScrollTop = st;
        if (lastDirection === 'down') return false;
        // downscroll code
        console.log("scrolling down");
        lastDirection = 'down';
    } else {
        lastScrollTop = st;
        if (lastDirection === 'up') return false;
        // upscroll code
        console.log("scrolling up");
        lastDirection = 'up';
    }

});

嗨,它似乎仍然会触发多次,每次滚动更改。我试图让它只在方向改变时开火。我想lastDirection的代码中一定有错误?它应该复制最后一个ScrollTop变量吗?我承认没有尝试过这个代码。让我马上把它插到小提琴上,看看会发生什么。啊,修好了。问题是lastDirection每次迭代都会重新初始化,因为它是在lambda函数中定义的。最好在定义lastScrollTop的相同范围内定义它。另请参见my,不幸的是,lastScrollTop需要放在if语句中,否则它也不会更新,除非方向改变。