我在网页中像这样操纵transform属性,以实现滚动效果:

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


我知道,在大多数浏览器(包括来自我的经验的Webkit)等待,直到脚本执行结束做任何视觉上的变化,但是在我的情况,我需要snapShotPage()重绘/重绘后运行已经出现,为了得到一个准确的快照。有什么办法吗?

我注意到,使用scrollTop导致出现此问题,但它不是我的情况选择。是否有使用setTimeout避免了溶液?

最佳答案

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

如果您的某些代码基于绘制结果,则必须对其进行转换。浏览器的油漆工作是不是同步工作流程的一部分,所以你需要为事件队列第二个代码块。

解决方案1:

window.setTimeout(snapShotPage, 0);


解决方案2:

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

解决方案3:

对DOM事件做出反应并通过MutationObserver调用snapShotPage change事件

关于javascript - 在Webkit的同步重绘/等待DOM更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17181875/

10-12 03:22