检测/测量滚动速度

新手上路,请多包涵

我试图想出一种方法来 测量滚动事件的速度,它会产生某种代表速度的数字(从滚动点 A 到点 B 的距离相对于它所花费的时间)。


我欢迎任何伪代码形式的建议…我试图在网上查找有关此问题的信息,但找不到任何信息。很奇怪,因为它是 2014 年,怎么可能在谷歌上没有任何东西……很奇怪!

原文由 vsync 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 506
2 个回答
 var checkScrollSpeed = (function(settings){
    settings = settings || {};

    var lastPos, newPos, timer, delta,
        delay = settings.delay || 50; // in "ms" (higher means lower fidelity )

    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;
    };
})();

// listen to "scroll" event
window.onscroll = function(){
  console.clear()
  console.log( checkScrollSpeed() );
};
 body{ height:300vh }

演示页面: http ://codepen.io/vsync/pen/taAGd/

简化演示:http: //jsbin.com/mapafadako/edit ?js,console,output


为了真正的乐趣,给一个真正的网站这些规则,然后复制 JS 并运行它

原文由 vsync 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是我为您的问题定制的脚本。 贾斌

您可以在控制台日志中查看滚动速度。它为向上滚动提供负值,为向下滚动提供正值。滚动条的实际位置在滚动窗口中不断更新,以便收集更多信息。这应该让你朝着正确的方向前进。

原文由 Gary Hayes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题