Webkit中的同步重绘/等待DOM更新?

时间:2013-06-19 02:13:47

标签: javascript html css webkit mobile-safari

我正在我的网页中操纵变换属性,以实现滚动效果:

element.style.webkitTransform = "translate(0px, -"+scrollY+"px)";
snapShotPage();

我知道在大多数浏览器中(包括我的经验中的Webkit)等到脚本执行结束后才进行任何可视化更改,但在我的情况下,我需要snapShotPage()在之后运行重绘/重绘已经发生,以获得准确的快照。有没有办法做到这一点?

我注意到使用scrollTop导致了这种行为,但在我的情况下它不是一个选项。是否有避免使用setTimeout的解决方案?

1 个答案:

答案 0 :(得分:3)

总是喜欢 - >代码 - >布局 - >油漆

如果您的某些代码基于绘制结果,则必须将其移动。浏览器的绘制工作不是同步工作流的一部分,因此您需要事件队列的第二个代码块。

解决方案1:

window.setTimeout(snapShotPage, 0);

解决方案2:

使用requestAnimationFrame并在下一帧调用snapShotPage函数。

解决方案3:

对DOM事件做出反应,并通过MutationObserver

调用snapShotPage更改事件