【问题标题】:How to stop browser redrawing until DOM manipulation complete?如何在 DOM 操作完成之前停止浏览器重绘?
【发布时间】:2017-12-05 10:43:34
【问题描述】:

在我的 1 页 Web 应用程序的各个点,我想做一些相当繁重的 DOM 操作,移动各种 div(每个 div 都有很多子元素)。我不希望浏览器在操作过程中反复重绘页面。有没有办法对浏览器说“暂停重绘,直到我继续”?

requestAnimationFrame() 似乎是一个候选者,但它适用于 DOM 重新排列,还是仅适用于动画?我还有什么可以做的吗?

谢谢

【问题讨论】:

  • 除非您特别引入带有超时等的断点,否则浏览器会在渲染 DOM 之前自动等待。手动优化它没有必要也不明智。
  • 有些事件会在启动和停止时触发,例如拖动。我只是构建应用程序以在 Dragstop 上触发页面重建而不是拖动。或者你可以这样做:css-tricks.com/snippets/jquery/done-resizing-event
  • 对您问题的天真回答会产生可怕的性能后果,所以我不想把它打出来。您能否提供有关当前事件流程的更多详细信息以及为什么会出现问题?

标签: javascript jquery html dom


【解决方案1】:

您可以尝试使用 documentFragment。

  1. 创建文档片段。
  2. 首先将所有内容写入一个documentFragment。
  3. 完成后,将 DOM 内容替换为 documentFragment。

那么操作不会即时发生,您使用 documentFragment 作为一种缓冲区。

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 2021-11-26
    • 1970-01-01
    • 2015-08-14
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2021-05-17
    相关资源
    最近更新 更多