la respuesta de David Mulder es una mejora, pero parece que va a desencadenar después de esperar el tiempo de espera milisegundos después del evento de cambio de tamaño primera. En otras palabras, si ocurren más cambios de tamaño antes del tiempo de espera, no reinicia el temporizador. Estaba buscando lo opuesto; Yo quería algo que esperar un poco de tiempo para que el cambio de tamaño de stop, y luego el fuego después de un cierto período de tiempo después de la última uno. El siguiente código hace eso.
El ID de cualquier temporizador actualmente en ejecución estará en timer_id. Entonces, cada vez que hay un cambio de tamaño, verifica si ya hay un tiempo corriendo. Si es así, cancela ese y comienza uno nuevo.
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);
¿En cuántos lugares diferentes de su código está redimensionando el lienzo?¿No podría simplemente llamar a su función de redibujado después de haber cambiado el tamaño? – robertc
No quiero afirmar que soy el único que cambia el tamaño de un lienzo en particular. – rampion
No sé si funcionaría para usted, pero estoy redibujando cada cuadro con 'requestAnimationFrame()' - Estoy recibiendo 60fps y no tengo que preocuparme por volver a dibujar cuando cambie de tamaño – Zac