Почему событие resize постоянно срабатывает, когда я назначаю ему обработчик с таймаутом? - PullRequest
2 голосов
/ 12 августа 2009

Я назначил тайм-аут своему обработчику window.resize, чтобы не вызывать мой код изменения размера существенной суммы каждый раз, когда происходит событие 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 (и, возможно, в других версиях) кажется, что при этом событие resize будет постоянно запускаться. Точнее, он будет срабатывать после каждого времени ожидания - в этом случае 100 миллисекунд.

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

Ответы [ 3 ]

2 голосов
/ 12 августа 2009

В своем коде // do stuff вы манипулируете какими-либо свойствами top, left, width, height, border, margin или padding?

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

0 голосов
/ 12 августа 2009

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

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

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

Вот тестовая страница, которую я использовал : для нее уже настроен довольно динамичный период ожидания, с которым вы можете играть.

0 голосов
/ 12 августа 2009

Как исправить событие изменения размера в IE

также см. Ответ для "scunliffe" "В ваших ... свойствах?

...