getBoundingClientRect()不一致

时间:2018-03-19 13:02:50

标签: javascript dom

我遇到DOMnode.getBoundingClientRect()的问题,因为返回的数据不一致。我正在使用windows.onload(因为缺少更好的选项)来触发我的函数,该函数使用getBoundingClientRect().height元素来进行一些计算。

问题是,元素的高度并不总是一致的。 window.onload甚至应该在页面生命周期中触发,据我所知,然后应该加载内容,样式表和外部资源,但是页面显然仍然没有正确呈现,因为我有时会得到它高度值类似400,528,630,有时它正确(700)我想读的元素。

思想?

是否有其他方法可以检测a div(或页面)何时完全呈现?

1 个答案:

答案 0 :(得分:1)

window的{​​{1}}确实意味着所有资源(包括样式表和图片)都已加载或失败,但是:

  1. 这并不一定意味着浏览器已完全呈现结果,
  2. 如果load上正在运行其他JavaScript代码并进行更改,则这些更改也可能会影响您所看到的内容(当然)
  3. 解决#2将特定于运行的代码,但如果您的问题只是#1,则短load应修复它:

    setTimeout

    你可能不得不玩延迟。 0往往适用于Chrome,但Firefox往往需要至少50-60ms范围内的值。

    或者只是window.onload = function() { setTimeout(function() { // Your code here }, 60); }; 可能就足够了:

    requestAnimationFrame

    您可以将上述其中一项与window.onload = function() { requestAnimationFrame(function() { // Your code here }); }; document.readyState的检查结合使用,因为那是the very last thing the browser does(当然,除了JavaScript代码设置为在完成时运行) 。例如:

    "complete"