IE8 $ ('body'). Width () = 0 при перерисовке

0

Обновление № 2:

Мне удалось ограничить количество повторных красок, используя инструмент Chrome Timeline (спасибо @iambriansreed за предложение). Это ограничение, по-видимому, решило проблему (добавит ответ ниже) или, по крайней мере, сделает его настолько редким, что это уже не проблема.

Тем не менее, он по-прежнему выполняет рендеринг "Макет" всякий раз, когда я изменяю innerHTML элемента (что очень много с плагином, который я пишу). Я попытался сделать это position: fixed пока я его изменяю (поскольку это не повлияет ни на что другое в макете, кроме самого себя), но это, похоже, не имеет никакого значения.


Обновление # 1:

Это не функция .onload в частности, которая вызывает это... это также происходит на document.ready. Я думаю, что это то, что происходит:

  1. document.ready fire
  2. для цикла
    1. предупредить ширину (правильно)
  3. window.onload огни
  4. для цикла
    1. оповещать о ширине (иногда правильно, в других случаях 0)
    2. "разрезать divs"
    3. перекрашивание

Кто-нибудь знает, как определить, когда происходит перерисовка, чтобы я не запрашивал его в тот момент? (PS почему IE не "останавливается", пока он рисует?!)


На $(document).ready(...) я дважды запускаю цикл for и оповещает о ширине тела ($('body').width();) каждый раз через. Я получаю значение, которое я ожидаю (например, 1092).

В $(window).on('load',...) я пробегаю по другому для цикла дважды, также каждый раз пропуская ширину тела. Я получаю 0 первый раз (и страница выглядит полностью пустой за предупреждением), а затем значение, которое я ожидал бы во второй раз (например, 1092).

Это проблема, которую я не могу реплицировать в урезанный пример, ни в любой другой браузер (Chrome, Safari, Firefox, IE9, IE10).

У кого-нибудь есть идеи или другие вещи, на которые я мог бы проверить?

Я использую $(window).on('load',...) чтобы разрезать некоторые div на основе их ширины, которая основана на их размере шрифта, который основан на webfont (который не обязательно загружается время $(document).ready(...) срабатывает).

  • 0
    Я предполагаю, что поведение в IE10 при использовании режима браузера IE8; посмотрите на вкладку сети разработчика. инструменты и посмотреть, загружается ли IE8 во что-то еще (например, в таблицу стилей) после того, как alert было в порядке, что происходит раньше, чем в других браузерах.
  • 0
    Поведение только в реальном IE8. Эмуляторы в IE10 и IE9 не показывают эту проблему. Таблицы стилей уже загружены - я мог видеть стили, примененные в предупреждениях $(document).ready . Это как в $(window).load это «перерисовывает», так как я пытаюсь получить ширину.
Показать ещё 4 комментария
Теги:
repaint
internet-explorer-8

2 ответа

0
Лучший ответ

Мне удалось ограничить количество повторных красок, используя инструмент Chrome Timeline (спасибо @iambriansreed за предложение). Это ограничение, похоже, решило проблему или, по крайней мере, сделало ее настолько редкой, что это уже не проблема.

0

У меня есть аналогичная проблема, и я обнаружил, что использование innerWidth() вместо этого работает во всех браузерах.

jQuery('body').innerWidth();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню