0

更新#2:

我设法通过使用 Chrome 时间轴工具来限制重新绘制的数量(感谢@iambriansreed 的建议)。这个限制似乎解决了这个问题(将在下面添加答案),或者至少使它变得如此罕见以至于它不再是一个问题。

但是,每当我修改元素的 innerHTML 时,它仍然会进行“布局”渲染(这对于我正在编写的插件来说很重要)。我在修改它时尝试制作它position: fixed(因为它不会影响布局中的其他任何东西,除了它本身),但它似乎没有任何区别。


更新#1:

造成这种情况的不是.onload特别的功能……它也发生在document.ready. 我认为这是正在发生的事情:

  1. document.ready 触发
  2. for 循环
    1. 警告宽度(正确)
  3. window.onload 触发
  4. for 循环
    1. 提醒宽度(有时正确,有时为 0)
    2. “切割 div”
    3. 重绘

有没有人知道如何检测何时发生重绘,以便我在那一刻不查询它?(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(...)触发时加载)。

4

2 回答 2

0

我有一个类似的问题,我发现使用 innerWidth() 而不是在所有浏览器中都可以使用。

jQuery('body').innerWidth();
于 2013-10-23T21:59:52.930 回答
0

我设法通过使用 Chrome 时间轴工具来限制重新绘制的数量(感谢@iambriansreed 的建议)。这种限制似乎解决了问题,或者至少使它变得如此罕见以至于不再是问题。

于 2013-10-24T18:09:06.227 回答