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

标签 javascript html css webkit mobile-safari

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

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

我知道在大多数浏览器(包括我的经验中的 Webkit)中,要等到脚本执行结束才能进行任何视觉更改,但是在我的情况下,我需要 snapShotPage() 来运行 重绘/重绘发生后,为了获得准确的快照。有什么办法吗?

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

最佳答案

总是这样 -> 代码 -> 布局 -> 绘制

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

解决方案一:

window.setTimeout(snapShotPage, 0);

解决方案 2:

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

解决方案 3:

对 DOM 事件使用react并通过 MutationObserver 调用 snapShotPage 更改事件

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

相关文章:

html - Bootstrap (CSS) - 使用响应式设计将一个图像覆盖在另一个图像上

javascript - 使用简单的 JavaScript 创建下一个和上一个按钮?如果声明?

css - Drupal 7 缓存和 css 压缩影响子域

javascript - 如何获取字符串中美元符号之间的值?

html - SVG 图标不工作

javascript - FullCalendar:如何重新创建/重新初始化 FullCalendar 或批量添加多个事件

html - 有没有办法让 svg 元素可以在 html 页面上突出显示?

css - React onMouseEnter/onMouseLeave 用于在 map 中悬停

javascript - 为什么函数在循环中仅检查一个值后返回 false

javascript - 清理 url onClick 问题