我正在我的网页中操纵变换属性,以实现滚动效果:
element.style.webkitTransform = "translate(0px, -"+scrollY+"px)";
snapShotPage();
我知道在大多数浏览器中(包括我的经验中的Webkit)等到脚本执行结束后才进行任何可视化更改,但在我的情况下,我需要snapShotPage()
在之后运行重绘/重绘已经发生,以获得准确的快照。有没有办法做到这一点?
我注意到使用scrollTop
导致了这种行为,但在我的情况下它不是一个选项。是否有避免使用setTimeout
的解决方案?
答案 0 :(得分:3)
总是喜欢 - >代码 - >布局 - >油漆
如果您的某些代码基于绘制结果,则必须将其移动。浏览器的绘制工作不是同步工作流的一部分,因此您需要事件队列的第二个代码块。
解决方案1:
window.setTimeout(snapShotPage, 0);
解决方案2:
使用requestAnimationFrame并在下一帧调用snapShotPage函数。
解决方案3:
对DOM事件做出反应,并通过MutationObserver
调用snapShotPage更改事件