假设我对使用window.requestAnimationFrame
创建的框架内的元素进行了更改,并且MutationObserver
正在观察修改后的元素。 MutationOberserver
的更改处理程序是否在同一帧内以及浏览器在帧之后进行渲染之前触发了吗?
(我可以想象,对于某些polyfill,这可能不是这样。我很想知道是否有任何保证在本机实现中这是真的。)
编辑:一个可能更好的问题是Are microtasks guaranteed to fire within the same animation frame where they were queued?,它可以间接地回答这个问题,并解释Promise行为或使用微任务的任何其他行为。
编辑17年7月19日:我想知道这个的原因是因为我想确切地知道如何修改DOM和基于DOM突变进行自定义渲染(fe WebGL)可以与浏览器的绘画保持同步。
例如,假设我的自定义元素的用户使用requestAnimationFrame
,然后修改我的webgl用途自定义元素的某些属性。我希望能够保证我可以在动画帧之后的浏览器绘制之前对这些更改作出反应,做我的webgl呈现用户期望的东西,并让它显示在下一帧中,而不是任何后期的框架。
根据一些理论,我知道Promise微任务在当前的macrotask之后触发,基于some testing I've done,我已经验证动画帧中定义的Promise处理程序将在下一个浏览器绘制之前触发。
将此扩展到Mutation Observers,我相信它们会在下一个微任务中触发,因此它们的行为与Promise处理程序相同:在下一个绘制之前触发。
我想我已经回答了我的问题,但也许确认会有所帮助。