onresize выполняется дважды
Доброго дня, кто подскажет почему событие onresize вызывает обработчик 2 раза...:help:
window.onresize = function () { alert('resize'); //то же и с console.log и через addEventListener }; нажимаю F11 или кнопку разворачивание окна и обработчик вызывается 2 раза. Браузер Chrome. |
это баг, срабатывает на начало и окончание, используй сеттаймаут
|
jsru_ спасибо, события onresizestart видимо в chrome нет? (
|
simple, не встречал:)
|
да они только в IE похоже есть, еще вопрос по теме, может лучше тогда использовать систему флагов чем таймер?
var flag = true; // global variable; window.onresize = function () { if (flag) { alert('resize'); flag = false; } else flag = true; }; что будет лучше для производительности? |
мне кажется onresize автоматом срабатывает на событие keyup и mouseup вот и получается дублирование, вместо onresizestart и onresizeend, ну да ладно. :)
|
simple, onresize процесс не одномоментный и ассинхронный (посколь перерендиваюца все элементы и по нескольку раз (рекурсивно) для внесения поправок) и при каждом изменении на пиксель может вызывать события
Борьба - мелкой задержкой(cрабатывает по окончании переходных режимов). Ранее в FF алерт в самой функции события( без подобной задержки) вообще вызывал крах браузера (где т в версии 12-13) var timerId_0=false; window.onresize = function () { clearTimeout(timerId_0); timerId_0 = setTimeout(function () { alert('resize'); //то же и с console.log и через addEventListener },10) }; |
Часовой пояс GMT +3, время: 18:11. |