更新#2:
我设法通过使用 Chrome 时间轴工具来限制重新绘制的数量(感谢@iambriansreed 的建议)。这个限制似乎解决了这个问题(将在下面添加答案),或者至少使它变得如此罕见以至于它不再是一个问题。
但是,每当我修改元素的 innerHTML 时,它仍然会进行“布局”渲染(这对于我正在编写的插件来说很重要)。我在修改它时尝试制作它position: fixed
(因为它不会影响布局中的其他任何东西,除了它本身),但它似乎没有任何区别。
更新#1:
造成这种情况的不是.onload
特别的功能……它也发生在document.ready
. 我认为这是正在发生的事情:
- document.ready 触发
- for 循环
- 警告宽度(正确)
- window.onload 触发
- for 循环
- 提醒宽度(有时正确,有时为 0)
- “切割 div”
- 重绘
有没有人知道如何检测何时发生重绘,以便我在那一刻不查询它?(PS 为什么 IE 在绘制时不会“暂停”?!)
在$(document).ready(...)
我运行 for 循环两次并$('body').width();
每次通过时都会提醒身体的宽度 ( )。我得到了一个我期望的值(例如 1092)。
在$(window).on('load', ...)
我运行另一个 for 循环两次,每次通过时也会提醒身体的宽度。第一次通过时我得到 0 (并且页面在警报后面看起来完全空白),然后是我期望第二次通过的值(例如 1092)。
这是一个我无法在精简示例中复制的问题,也无法在任何其他浏览器(Chrome、Safari、Firefox、IE9、IE10)中复制。
有没有人有任何想法或其他我可以测试的东西?
我$(window).on('load', ...)
用来根据它们的宽度切割一些 div,这是基于它们的字体大小,它基于 webfont(不一定在时间$(document).ready(...)
触发时加载)。