我正在尝试想出一种方法来测量滚动事件的速度,产生一个代表速度的数字(从滚动点A到点B的距离相对于所花费的时间)。
我欢迎以伪代码的形式提出任何建议...... 我试图在网上找到有关这个问题的信息,但无法找到任何东西。非常奇怪,因为那是2014年,怎么可能在谷歌上没有任何内容...太奇怪了!
我正在尝试想出一种方法来测量滚动事件的速度,产生一个代表速度的数字(从滚动点A到点B的距离相对于所花费的时间)。
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
timer =0
以及设置 timer && clearTimeout(timer); timer =setTimeout(clear,30);
? - Lukesettings
是什么?这个参数只能在IIFE的末尾设置,对吗?})(mySettings})
- katerlouis这是我为你的问题定制的脚本。 JS Bin
您可以在控制台日志中查看滚动速度。它为向上滚动提供负值,向下滚动则为正值。滚动条的实际位置会不断更新以获取更多信息。这应该能让您朝着正确的方向前进。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
body{height:2000px;}
#get{position:fixed;top:0px;}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var timer = null;
var count=0
$(window).on('scroll', function() {
if(timer !== null) {
clearTimeout(timer);
}
function increase(){
count++
timer = setTimeout(increase,50)
}
increase()
});
$('#get').click(function(){
alert(count)
count=0
})
})
</script>
</head>
<body>
<input name="" type="button" id="get" value="getTime">
<body>
</html>