requestAnimationFrame 在何时执行

发布于 2022-09-04 17:58:47 字数 711 浏览 23 评论 0

requestAnimationFrame 是一个 microtask 还是一个 macrotask

setTimeout(() => {
  console.log('setTimeout')
}, 0)

requestAnimationFrame(() => {
  console.log('requestAnimationFrame')
})

new Promise(r => {
  console.log('promise')
  r()
}).then(() => console.log('then')

如果是一个 microtask, 那么他应该打印 promise requestAnimationFrame then setTimeout

如果是一个 macrotask, 那么他应该打印 promise then setTimeout requestAnimationFrame

但是实际上有两种可能的打印: promise then requestAnimationFrame setTimeoutpromise then setTimeout requestAnimationFrame

难道是它既不是一个 macrotask 也不是 microtask ,但是浏览器会在下一帧开始的时候把它加入到 microtask 队列的最前方

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事和酒 2022-09-11 17:58:47

requestAnimationFrame是一个单回调,和setTimeout差不多

区别是:

setTimeout的时间是你指定的

requestAnimationFrame你不用写时间,它的重绘时间间隔是根据不同浏览器的刷新频率自行脑补的- -所以有严重兼容问题,记得有封装好的处理兼容的函数。

W3C 标准,requestAnimationFrame在浏览器每次刷新页面之前执行(之前是何时?浏览器刷新频率才知道,不归你管)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文