2009-08-11 1 views
2

Я назначил тайм-аут для моего обработчика window.resize, чтобы я не стал называть мой размер размерного кода при каждом изменении события изменения размера. Мой код выглядит следующим образом:Почему событие изменения размера постоянно срабатывает, когда я назначаю ему обработчик с таймаутом?

<script> 
function init() { 
    var hasTimedOut = false; 
    var resizeHandler = function() { 
    // do stuff 
    return false; 
    }; 

    window.onresize = function() { 
    if (hasTimedOut !== false) { 
     clearTimeout(hasTimedOut); 
    } 
    hasTimedOut = setTimeout(resizeHandler, 100); // 100 milliseconds 
    }; 
} 
</script> 
<body onload="init();"> 
... 
etc... 

В IE7 (и, возможно, другие версии) кажется, что, когда вы делаете это изменение размеров события будет постоянно огнь. Точнее, он будет срабатывать после каждой продолжительности тайм-аута - 100 миллисекунд в этом случае.

Любые идеи, почему и как остановить это поведение? Я бы предпочел не называть мой код изменения размера для каждого события изменения размера, которое срабатывает при одном изменении размера, но это хуже.

ответ

2

В вашем // коде кода, вы управляете любыми свойствами верхнего, левого, ширинного, вертикального, пограничного, поля или дополнений?

Вы непреднамеренно может быть запуск рекурсию, которые непреднамеренно вызывает рекурсию, которые непреднамеренно вызывает рекурсию ...

+0

Nope. Все, что я делаю, это добавить некоторые div. – ntownsend

+0

... и ни один из этих разделов не приводит к тому, что содержимое страницы изменит ширину/высоту до такой степени, что приведет к появлению/исчезновению вертикальных или горизонтальных полос прокрутки? ;-) Это также может привести к тому, что IE перезапустит события изменения размера. – scunliffe

+0

Я думаю, что вы частично правы. Они не заставляют полосы прокрутки появляться или исчезать, но, похоже, рисование divs делает что-то в окне, чтобы сделать события изменения размера. Когда я заменяю рисунок div на какую-то фиктивную функцию, которая на самом деле ничего не делает, я больше не вижу переменные события, постоянно стреляющие. – ntownsend

0

How to fix the resize event in IE

также смотрите ответ на «scunliffe» «В ваших ... свойствах?

+0

Спасибо, но одно из моих ограничений заключается в том, что я не могу использовать JQuery (или любую другую фреймворк) :(Может быть, я могу понять, что на самом деле делает JQuery, и реализовать его для себя. – ntownsend

+0

Точно, я нашел ссылку полезную для вас на наименее получить код и использовать его –

+1

hmm, что http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/ ссылка больше не работает –

0

IE действительно постоянно запускает событие изменения размера при изменении размера (которое вы должны знать, так как вы уже используете тайм-аут для исправления).

Я могу реплицировать съел результаты, которые вы видите, используя свой код, на моей тестовой странице.

Однако проблема уходит, если я увеличиваю тайм-аут до 1000 вместо 100. Возможно, вы захотите попробовать с различными значениями ожидания, чтобы узнать, что сработает для вас.

Here is the test page I used: у этого есть очень динамичный период ожидания, уже настроенный для вас, чтобы играть.

+0

Я не видел этого поведения с вашей тестовой страницей. – ntownsend