Почему событие изменения размера постоянно срабатывает, когда я назначаю ему обработчик с тайм-аутом?
-
13-09-2019 - |
Вопрос
Я назначил тайм-аут своему обработчику 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.Возможно, вы захотите попробовать разные значения ожидания, чтобы посмотреть, что подойдет именно вам.
Вот тестовая страница, которую я использовал:у него уже настроен приятный динамичный период ожидания, с которым вы можете поиграть.