Javascript 在DOM环境中何时发生回流?
什么样的活动会触发具有DOM的网页回流 似乎有不同的观点。据报道,这种情况经常发生Javascript 在DOM环境中何时发生回流?,javascript,performance,dom,reflow,Javascript,Performance,Dom,Reflow,什么样的活动会触发具有DOM的网页回流 似乎有不同的观点。据报道,这种情况经常发生 添加或删除DOM节点时 动态应用样式时(例如element.style.width=“10px”) 检索必须计算的度量值时,例如访问offsetWidth、ClientHight或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle) 然而,根据,只有当回流操作已排队时,进行测量才会触发回流 还有人有其他想法吗 document.body.sty
- 添加或删除DOM节点时
- 动态应用样式时(例如element.style.width=“10px”)
- 检索必须计算的度量值时,例如访问offsetWidth、ClientHight或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle)
document.body.style.display = 'none';
document.body.style.display = 'block';
这通常可以解决那些无法理解的布局错误。这两篇文章都是正确的。
可以安全地假设,每当您在做一些合理地要求计算DOM中元素的维度的事情时,您将触发回流
此外,据我所知,这两篇文章说的是同一件事
第一篇文章说回流发生在:
当您检索必须计算的度量值时,例如访问offsetWidth、clientHeight,或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle),而DOM更改将排队等待进行
第二条规定:
如前所述,浏览器可能会为您缓存多个更改,并且仅在这些更改全部完成后回流一次。但是,请注意,对元件进行测量将迫使其回流,以便测量结果正确。这些变化可能会也可能不会明显地重新喷漆,但回流本身仍必须在幕后进行
当使用诸如offsetWidth之类的属性或诸如getComputedStyle之类的方法进行测量时,会创建此效果。即使不使用这些数字,只要在浏览器仍在缓存更改时使用其中任何一个,就足以触发隐藏的回流。如果重复进行这些测量,则应该考虑只使用一次,然后存储结果,然后再使用。
我认为这和他们之前说的意思是一样的。Opera将尽最大努力为您缓存值并避免回流,但您不应该依赖它的能力
无论出于何种目的,只要相信他们所说的,当他们说所有三种类型的交互作用都会导致回流时
干杯。查看的“由属性读取访问触发的渲染”部分,IE中的以下代码将导致渲染活动
function askforHeight () {
$("#lower").height();
}
不同的浏览器表现不同。除非它们表现相同。;)查看Paul Irish的演讲:回流是由高度、宽度、偏移宽度等的变化引起的。绝对定位确实如此。除了回流之外,有没有办法强制重新喷漆?为了以较小的增量呈现较大的页面,从而提高最终用户感知的呈现速度。@coderjoe,“对元素进行测量将迫使其回流”,为什么它们没有缓存在浏览器中?如果我在对方之后立即调用getComputedStyle 3次会发生什么!我会有3次回流!我遇到了一个ie6错误,它在错误的地方显示了swf。通过设置
swfObj.style.display=“block”
Wow解决,您还需要支持IE6吗?保持强壮,士兵。