javascript - 在不同的 DOM 元素中组合/批量更新多个 CSS 以减少回流/重绘?

标签 javascript css dom repaint reflow

背景:
我有一个 HTML 页面,它使用 WebGL Canvas 来显示一些 3D 内容。叠加多个 <div>由内联 CSS 放置 position: absolute以及top的相关尺寸和left .

问题:
当我更新 3D 内容的 View 时(例如稍微旋转所有内容),我还需要移动所有覆盖的 <div>这样它们看起来就停留在 3D 空间中的同一个地方。
如何更新网页,以便只进行一次重绘?

当我第一次重新绘制 WebGL,然后迭代 n <div> ,每帧我会得到n+1次重绘。在动画中这不太好,应该达到至少 30 fps...

注意:
我也知道其他问题,例如:
Is there a way to apply multiple CSS styles in a batch to avoid multiple reflows? - 但这讨论的是在一个元素中组合多个 CSS 参数(我已经在这里使用它来从 2 n+1 下降到 n+1...)
Multiple DOM updates in a single redraw/reflow? - 但我不确定这是否有帮助,因为我想我也会有n+1次重画...

PS:允许使用 jQuery,因为它已在该元素中使用。

最佳答案

如果相对于 div 的其他位置没有改变,您可以执行下一步:

  1. 创建一个位置为绝对/相对/固定的父级
  2. 将所有 div 附加到此父级并在 CSS 中设置它们的位置(位置将相对于父级)
  3. 移动父 div 并更改父 div 的样式

关于javascript - 在不同的 DOM 元素中组合/批量更新多个 CSS 以减少回流/重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757715/

相关文章:

javascript - 在 :hover in contenteditable 上显示图标

javascript - chrome 扩展——将 div 附加到 body 不能像按钮一样使用 facebook

java - 如何分配唯一的 DOM 元素 ID

Javascript 选项卡 Accordion 问题

javascript - 通过 JS 或 jQuery 函数更改表单选项?

php - 通过代理服务器从 Javascript 调用数据

javascript - 将 Pig Latin JavaScript 函数转换为 GUI 时遇到问题

javascript - 使用 JavaScript 使用箭头键移动图像

css - 侧边栏和内容不能正确调整宽度

html - 使用 flexbox 修改 block 布局