请求动画帧处理序列
requestAnimationFrame processing sequence
如果我有以下代码:
window.requestAnimationFrame(animation1); //animation1 takes more than 16.67ms, misses the frame.
window.requestAnimationFrame(animation2); //animation2 takes 1ms to execute
假设animation1
和animation2
是简单的变色动画,这是否意味着animation2
会在animation1
之前出现在屏幕上?
还是对requestAnimationFrame
的调用堆叠在浏览器队列中,后续调用仅在上一个调用完成时执行?
TL;DR
animation1
将始终在调用 animation2
之前运行完成,但如果其中任何一个花费的时间太长,浏览器可能不会调用它们中的任何一个一两个帧。
requestAnimationFrame
规范说:
调用 requestAnimationFrame() 方法时,用户代理必须运行以下步骤: ...
将方法的参数追加到文档的动画帧回调
- 列表中,该回调与文档的动画帧回调标识符的当前值相关联。
和:
当用户代理要为现在具有时间戳的文档文档运行动画帧回调时,它必须运行以下步骤:
让回调
- 是 doc 的动画帧回调列表中的条目列表,按照它们添加到列表中的顺序排列。
因此,我们可以通过运行来看到:
window.requestAnimationFrame(animation1);
window.requestAnimationFrame(animation2);
您正在排队animation1
,animation2
下次调用"用户代理将运行动画帧回调"。
该时间被指定为主事件循环的一部分:
- 对于文档中的每个完全活动文档,运行该文档的动画帧回调,现在作为时间戳传入。
但是在此之前,它指定:
- 如果用户代理认为此时更新其呈现不会从顶级浏览上下文 B 中受益,则从文档中删除浏览上下文的顶级浏览上下文为 B 的所有 Document 对象。
这意味着如果您的回调花费的时间太长,它可能会决定丢弃帧而不运行它们。 但是,由于所有请求的帧都是在步骤 9 中一个接一个地执行的,因此您应该始终在 animation2
之前看到 animation1
的结果,但浏览器可能会决定从其呈现循环中删除整个文档,并且在通过事件循环进行后续迭代之前不调用队列中的任何一种方法。
相关文章:
- Adobe Edge:动画完成时添加onComplete处理程序
- 使用不同的超时对数组中的每个项目进行角度动画处理
- 图表.js 2,从右到左(不是自上而下)进行动画处理
- 使用 JavaScript 对 HTML5 进度条进行动画处理
- 使用 JQuery 对 Spin SVG 元素进行动画处理
- 使用 GSAP 对模糊滤镜进行动画处理
- 使用 jQuery 对窗口进行动画处理
- 如何使用jQuery对固定元素的位置进行动画处理
- jQuery 动画处理最大宽度溢出问题
- 悬停不起作用时对不透明度更改进行动画处理
- 处理 QML 动画的屏幕分辨率更改
- 在两个值之间插值或“补间”(但不进行动画处理)
- 尝试在画布中对形状进行动画处理时,它会显示,但不移动
- 如何在不分隔跨度字母的情况下对文本进行动画处理
- 对链接的 svg 进行动画处理不起作用;内联时工作正常
- 防止对某些事件进行进一步的动画处理
- Snap.svg:在动画中使用相同的种类对多个零件进行动画处理
- 如何使用if语句jquery对数字进行动画处理
- 按随机顺序对元素进行动画处理
- 元素在使用 jQuery 对相对包装宽度进行动画处理时消失