【发布时间】:2016-07-27 17:36:33
【问题描述】:
例如,如果我做类似的事情
requestAnimationFrame(function() {
el.appendChild(otherEl)
el.appendChild(anotherEl)
anotherEl.removeChild(someOtherEl)
anotherEl.appendChild(yetAnotherEl)
})
这是否会导致(同步?)重绘/重绘在我们试图避免重绘/重流时发生,从而使requestAnimationFrame 的目的无效?
或者,浏览器是否会智能并等到该帧完成(在所有这些 DOM 操作完成之后)才能最终绘制生成的 DOM 结构?
在 requestAnimationFrame 中,哪些事情会导致重绘/重排,并且我们希望避免这样做?
this html5rocks article 中的样式列表仅提及(我认为)在修改它们时会导致重绘/重排的样式。我也很想知道哪些 JavaScript 属性(以及它们在哪个对象上)在被访问时会导致重排(即发生重排是为了能够获取某个属性的值)。
【问题讨论】:
-
您是按帧执行的,即定期添加子项吗?
-
@TahirAhmed 不一定。它可能每隔几秒钟,甚至可能不到一秒钟。不过,我不想对其施加限制。用例可以是任何东西(例如,每帧添加删除元素以产生某种快速闪烁的效果)。
-
每帧添加删除元素 我认为你会因为浏览器倾向于每秒渲染 60 帧而在视觉上注意到任何东西太快了。
-
但是,我知道这是一个示例场景,rAF 在这里没有目的。您只想了解在单个帧上,上述添加和删除子操作将如何执行。
标签: javascript html animation graphics requestanimationframe