是否有一个优化取消请求动画帧
Is there an optimization in canceling request animation frame?
在window.cancelAnimationFrame();
中是否有任何好处(甚至可能)?
如果是,我该怎么做,为什么?
Ref: requestAnimationFrame MDN
var last_known_scroll_position = 0;
var ticking = false;
function doSomething(scroll_pos) {
// do something with the scroll position
}
window.addEventListener('scroll', function(e) {
last_known_scroll_position = window.scrollY;
if (!ticking) {
window.requestAnimationFrame(function() {
doSomething(last_known_scroll_position);
ticking = false;
});
}
ticking = true;
});
您可以通过直接传递doSomething
作为rAF参数并将ticking = false
直接包含在doSomething
中来避免匿名函数。
您还可以删除last_known_scroll_position
变量声明,因为它只是window.scrollY
,这也消除了对doSomething
的参数的需要。顺便说一下,使用pageYOffset
比scrollY
更好,以获得更广泛的浏览器支持。
否则,你的逻辑是好的。
这个标志将避免在一个已经等待的函数调用时堆叠另一个函数调用,并且使用cancelAnimationFrame
只会不必要地用创建这个匿名函数填充您的内存,从而强制过早地启动GC。
因此,一旦应用了所有内容,你就得到了这样的内容:
var ticking = false;
function doSomething() {
ticking = false;
var scroll_pos = window.pageYOffset;
// do something with the scroll position
}
window.addEventListener('scroll', function(e) {
if (!ticking) {
window.requestAnimationFrame(doSomething);
}
ticking = true;
});
相关文章:
- 画布:逐像素绘制图像并请求动画帧计时
- 将对象函数传递给请求动画帧时丢失对象引用
- 防止请求动画帧一直运行
- 取消请求动画设置时间后的帧
- 如果 Ajax 请求太快,jQuery 动画将无法正常工作
- 从间隔到请求动画帧
- Javascript move 元素与鼠标移动事件 60 FPS 请求动画帧
- 如何控制动画速度(请求动画帧)
- 请求动画帧范围更改为窗口
- 反应.js - 在请求动画帧上呈现
- 如何通过请求动画帧从其新实例中移动形状
- 从对象引用请求动画帧时出错
- HTML5 画布撕裂与请求动画帧
- 请求返回结果的动画帧
- 请求 iPhone 上的动画帧
- 当 ajax 请求速度时不显示动画.js
- 有关请求动画帧的问题
- 如何使用请求动画帧暂停和重新启动秒表计时器
- 请求动画帧不适用于小于 1 的十进制数
- 不同速度的动画请求AnimFrame javascript