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, время: 16:10. |