JavaScript 事件处理具有延迟的滚动事件
JavaScript event handling scroll event with a delay
有人可以解释并帮助我解决这个问题吗?我的网页很笨拙,因为滚动功能正在将其向下拖动。我需要添加延迟,但不知道如何做到这一点。
$(window).scroll(handleScroll);
您可以编写一个简单的油门去抖动函数来限制每秒处理滚动事件的次数。
function debounce(method, delay) {
clearTimeout(method._tId);
method._tId= setTimeout(function(){
method();
}, delay);
}
$(window).scroll(function() {
debounce(handleScroll, 100);
});
这将确保每次调用handleScroll
之间至少有 100 毫秒(或者,换句话说,每秒最多调用 10 次)。
正如zzzzBov指出的那样,Zakas所描述的油门功能实际上是一个去抖功能。不同之处在于,去抖动会丢弃多余的滚动事件,而节流函数应该将它们排队以便稍后处理(但以给定的最大速率)。
对于滚动事件,您不希望出现真正的限制。
对于滚动,您很可能需要一个像 Lodash 或 Underscore 这样的油门功能; 很好的例子:
function throttle(func, timeFrame) {
let lastTime = 0;
return function () {
const now = new Date();
if (now - lastTime >= timeFrame) {
func();
lastTime = now;
}
};
}
这是此存储库的简单实现
这取决于您通过滚动回调实现的内容。在某些情况下,油门会更好用。例如,无限滚动。
因此,只有在用户停止滚动时才触发去抖动,我们需要在用户到达底部之前开始获取内容。
但是通过油门,我们可以保证我们不断检查我们离底部有多远。
结语:
- 去抖动:将突发事件(如击键)分组为一个事件。
- 限制:保证每 X 毫秒的恒定执行流。就像每 200 毫秒检查一次滚动位置以触发 CSS 动画一样。
- requestAnimationFrame:一种油门替代方案。当您的函数重新计算并在屏幕上呈现元素时,您希望保证平滑的更改或动画。注意:不支持 IE9。
相关文章:
- 只覆盖箭头键滚动事件
- Javascript如何找到滚动事件的来源
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- jquery/ajax无限滚动事件
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 如何用javascript调用函数,然后在滚动事件中调用该函数的特定实例
- 从父元素取消绑定滚动事件并绑定到子元素
- JavaScript/jQuery未触发滚动事件
- 如何使用javascript检测不可滚动元素中的滚动事件和方向
- AngularJS窗口滚动事件未触发
- 正在阻止滚动事件
- JavaScript 事件处理具有延迟的滚动事件
- 在画布上创建滚动事件
- 如何由于浏览器的平滑滚动而忽略大量滚动事件
- onclick滚动事件-语法
- 带有滚动事件的Javascript集翻译速度较慢
- 在firefox上的滚动事件中移动元素
- 鼠标滚轮事件和滚动事件相互冲突
- 滚动事件运行缓慢-有没有更轻松的方法