javascript - 测量滚动速度 Javascript 和触发事件

标签 javascript

我想在窗口滚动速度超过某个值时触发一个事件。我找到了一些有助于测量速度的代码,但我无法弄清楚为什么当速度超过 150 时没有触发 if 语句。我们将不胜感激任何帮助。

const checkScrollSpeed = (function(settings){
    settings = settings || {};

    let lastPos, newPos, timer, delta, 
        delay = settings.delay || 50;

    function clear() {
        lastPos = null;
        delta = 0;
    }

    clear();

    return function(){
        newPos = window.scrollY;
        if ( lastPos != null ){ // && newPos < maxScroll 
            delta = newPos -  lastPos;
        }
        lastPos = newPos;
        clearTimeout(timer);
        timer = setTimeout(clear, delay);
        return delta;
    };
})();

const container = document.querySelector('#container');

window.addEventListener('scroll', function() {
    console.log(checkScrollSpeed());
    if (checkScrollSpeed() > 150) {
        console.log('150+')
        container.classList.add('red');
    }
});
#container {
  width: 75%;
  height: 170vh;
  background-color: yellow;
}
#container.red {
  background-color: red !important;
}
<div id="container"></div>

最佳答案

您正在连续调用 checkScrollSpeed,当第二次调用时,delta 为 0。删除 console.log 或将 delta 分配给某个变量并将其用于日志记录和条件。

关于javascript - 测量滚动速度 Javascript 和触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019151/

相关文章:

javascript - Extjs 4.0.2a 打破网格列隐藏?

javascript - 使div与其中的图像大小相同

javascript - jQuery 插件 : ":hover" doesnt work in IE8

javascript - 如何在到达字母 A 时停止左键?

javascript - jquery,切换 css 内容(上下箭头)

javascript - 使用小书签将代码添加到 <body> 标记

php - 如何在没有Flash的情况下从网站上录制用户的声音?

javascript - 单击 HTML 站点中的导航栏元素外部时如何关闭打开的折叠导航栏?

javascript - AJAX PHP 数据库查询不起作用

javascript - Lodash groupby 对象并组合数组