re - это не такая вещь, как конечное событие изменения размера, которое вы можете прослушать. Единственный способ узнать, когда пользователь изменил размер, - это подождать, пока не пройдет какое-то короткое время, при этом не произойдет больше изменений размера. Вот почему решение почти всегда включает в себя использование setTimeout()
, потому что это лучший способ узнать, прошел ли какой-то период времени без каких-либо изменений размера.
Это предыдущий мой ответ прослушивает .scroll()
события, но это точно такое же понятие, как .resize()
: More efficient way to handle $(window).scroll functions in jquery? и вы можете использовать ту же концепцию для изменения размера, как это:
var resizeTimer;
$(window).resize(function() {
if (resizeTimer) {
clearTimeout(resizeTimer); // clear any previous pending timer
}
// set new timer
resizeTimer = setTimeout(function() {
resizeTimer = null;
// put your resize logic here and it will only be called when
// there's been a pause in resize events
}, 500);
}
Вы можете экспериментировать с 500
значение для таймера, чтобы увидеть, как вам это нравится. Чем меньше число, тем быстрее он вызывает обработчик изменения размера, но затем его можно вызвать несколько раз. Чем больше число, тем дольше пауза у него есть до начала стрельбы, но с меньшей вероятностью срабатывает несколько раз во время одного и того же действия пользователя.
Если вы хотите что-то сделать до изменения размера, вам нужно будет вызвать функцию при первом событии изменения размера, которое вы получите, а затем не будете снова вызывать эту функцию во время текущей операции изменения размера.
var resizeTimer;
$(window).resize(function() {
if (resizeTimer) {
clearTimeout(resizeTimer); // clear any previous pending timer
} else {
// must be first resize event in a series
}
// set new timer
resizeTimer = setTimeout(function() {
resizeTimer = null;
// put your resize logic here and it will only be called when
// there's been a pause in resize events
}, 500);
}
Возможно, есть веская причина, почему это всегда решение ... – Barmar
Как вы что-то делаете перед изменением размера, вам нужны телепатические способности, чтобы знать, когда пользователь задумывается изменить размер окна? Что касается after, большинство браузеров запускают событие изменения размера почти непрерывно, поэтому требуется тайм-аут, чтобы увидеть, когда событие изменения размера перестает стрелять в течение определенного времени. – adeneo
Что случилось с 'setTimeout' в этом случае? –