запуск события window.resize в Internet Explorer - PullRequest
75 голосов
/ 05 декабря 2009

Как вам известно, в Internet Explorer событие window.resize вызывается при изменении размера любого элемента на странице. Не имеет значения, был ли размер элемента страницы изменен путем назначения / изменения его высоты или атрибут style, просто добавив к нему дочерний элемент или что-то еще, даже если изменение размера элемента не влияет на размеры самого окна просмотра.

В моем приложении это вызывает неприятную рекурсию, так как в моем обработчике window.resize я изменяю размеры некоторых

элементов, что, в свою очередь, перезапускает window.resize и т. Д. Опять же, это только проблема в IE.

Есть ли способ предотвратить запуск window.resize в IE в ответ на изменение размеров элементов на странице?

Я должен также упомянуть, что я использую jQuery.

Ответы [ 15 ]

0 голосов
/ 23 января 2014
(function ($){
     //if ie8 -> return;
     var lastHeight = 0;
     var lastWidth = 0;
     $(window).resize(function(event){
         if (window.innerHeight == lastHeight && window.innerWidth == lastWidth)
             { event.stopImmediatePropagation(); }
         lastHeight = window.innerHeight;
         lastHeight = window.innerWidth;
     });
})();

помогает мне ...

0 голосов
/ 29 сентября 2013

Это зависит от того, как содержимое в событии изменения размера.

Я понял, что вышеприведенные решения разрешаются только тогда, когда страница состоит из статического содержимого, а не из динамически отображаемых. В динамическом случае, когда существующее содержимое будет перерисовано каким-либо триггерным событием, таким как функция перезагрузки содержимого, нам нужно вместо этого использовать $ (document) .width () или $ (document) .height ().

Это из-за полосы прокрутки окна. Если страница имеет полосу прокрутки и основное содержимое будет перерисовано нажатием кнопки «Перезагрузить», полоса прокрутки исчезнет с события. В этом случае $ (window) .width () или $ (window) .height () изменяется при отображении содержимого, а не при реальном изменении размера окна.

http://www.tech -step.net /? Р = 466

0 голосов
/ 31 марта 2012
$(window).resize(function(event)
{
    if (typeof event.target.tagName == 'undefined')
    {
        // ...
    }
});
0 голосов
/ 04 ноября 2010

Мой патч:

<!--[if lte IE 7]>
<script type="text/javascript">
  window.onresize = null;       // patch to prevent infinite loop in IE6 and IE7
</script>
<![endif]-->
0 голосов
/ 06 декабря 2009

Мне не удалось запустить событие resize при изменении размера элемента (хотя только в IE8).

Однако, что означает target на объекте события, когда вы испытываете эту проблему, вы могли бы сделать:

$(window).resize(function(e) {
    if( e.target != window ) return;
    // your stuff here
});
...