Ответ Дэвида Малдера является улучшением, но, похоже, он сработает после ожидания timeout миллисекунд после первого события изменения размера. Другими словами, если перед тайм-аутом произойдет больше изменений, таймер не будет сброшен. Я искал противоположное; Я хотел что-то, что могло бы немного подождать, пока события изменения размера прекратятся, а затем сработать через определенное время после last . Следующий код делает это.
Идентификатор любого запущенного в данный момент таймера будет в timer_id. Таким образом, всякий раз, когда происходит изменение размера, он проверяет, есть ли уже время. Если это так, он отменяет этот и запускает новый.
function setResizeHandler(callback, timeout) {
var timer_id = undefined;
window.addEventListener("resize", function() {
if(timer_id != undefined) {
clearTimeout(timer_id);
timer_id = undefined;
}
timer_id = setTimeout(function() {
timer_id = undefined;
callback();
}, timeout);
});
}
function callback() {
// Here's where you fire-after-resize code goes.
alert("Got called!");
}
setResizeHandler(callback, 1500);