[如果我通过JS对DOM中的更改进行动画处理(例如,将节点的textContent的值从1更改为500),在requestAnimationFrame
中使用requestAnimationFrame
或requestIdleCallback
会更好吗?
如果要为某些代码制作动画,则仅使用requestAnimationFrame
,如果仅当浏览器不再需要其他操作时才执行操作,则使用requestIdleCallback
。
为简单起见,让我们考虑requestAnimationFrame
和requestIdleCallback
都是setTimeout
调用,并带有变量超时参数。
requestAnimationFrame
将是setTimeout(fn, time_until_next_screen_refresh)
。在页面绘制到屏幕之前,将立即调用fn
。目前这是我们制作动画的最佳计时器,因为它可以确保我们仅以实际显示帧的速度,以监视器能够呈现的速度(仅在我们的代码快速的情况下,在每一帧)对视觉帧进行一次视觉修改。足够。
requestIdleCallback
将是setTimeout(fn, time_until_idle)
。浏览器无事可做时,将立即调用fn
。这可以立即进行,也可以在一些事件循环中进行迭代。
因此,尽管两者都有相似的API,但它们提供的功能完全不同,并且唯一可行的动画制作方法是requestAnimationFrame
,因为requestIdleCallback
基本上与渲染没有任何链接。