Почему событие изменения размера постоянно срабатывает, когда я назначаю ему обработчик с тайм-аутом?

StackOverflow https://stackoverflow.com/questions/1262774

Вопрос

Я назначил тайм-аут своему обработчику 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 миллисекунд.

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top