重绘时IE8 $('body')。width()为0

时间:2013-10-23 21:52:39

标签: javascript jquery internet-explorer-8 repaint

更新#2:

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

但是,每当我修改一个元素的innerHTML时,它仍会进行“布局”渲染(这与我正在编写的插件有很多关系)。我在修改它时尝试将其设为position: fixed(因为这不会影响布局中除此之外的任何其他内容),但它似乎没有任何区别。


更新#1:

特别是.onload函数导致这种情况......它也发生在document.ready上。我认为这就是发生的事情:

  1. document.ready fires
  2. for循环
    1. 警告宽度(正确)
  3. window.onload fires
  4. for循环
    1. 警告宽度(有时是正确的,其他时间为0)
    2. “cut up divs”
    3. 重绘
  5. 有没有人知道如何检测重绘的时间,以便我当时不查询它? (P.S.为什么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(...)时加载的火灾)。

2 个答案:

答案 0 :(得分:0)

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

jQuery('body').innerWidth();

答案 1 :(得分:0)

我设法使用Chrome时间线工具限制重新绘制的数量(感谢@iambriansreed的建议)。这种限制似乎解决了这个问题,或者至少使它不那么频繁,以至于它不再是一个问题。