Element.getBoundingClientRect 何时保证更新/准确?

use*_*740 7 html javascript css reflow getboundingclientrect

我正在处理一些使用Element.getBoundingClientRect(gBCR) 加上内联样式更新来执行计算的代码。这不适用于一般网站,我不关心或不感兴趣是否有“更好的 CSS 方法”来完成这项任务。

JavaScript同步运行并执行以下步骤:

  1. 获取父代的 gBCR
  2. 执行计算并且;
  3. 一个子元素的父有内联CSS样式更新(例如,大小和边距)
  4. 再次获取父代的 gBCR

我是否保证计算出的客户端边界将反映第 4 步中父对象的新边界矩形?

如果规范没有保证,这是现代1浏览器实现的“保证”吗?如果“基本保证”,有哪些值得注意的例外?

元素不会被添加到 DOM 或从 DOM 中移除,并且被修改的元素是父节点的直接子节点;如果此类限制/信息相关。


1 “现代”:UIWebView (iOS 6+)、WebView (Android 2+),以及常见的 Chrome/WebKit、FF、IE9+ 嫌疑人——包括移动版本。

小智 1

我只是陷入了 ios8.4.1/Safari8.0 上的 gBCR 不可靠性问题。

在 body 顶部准备一个大 div(gBCR 为 0)并滚动到底部(gBCR 为负)。将 div 大小调整为 1x1,然后window.scrollY自动变为 0。gBCR 也应该为 0,但仍保持负值。使用setTimeout,200ms后,可以确认正确的值0。