¿Cómo llamo a una función una vez que las ventanas del navegador TERMINARON de cambiar el tamaño?
Estoy tratando de hacerlo así, pero tengo problemas. Estoy usando la función de evento JQuery Resize:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
Sin embargo, esta función se llama continuamente si el usuario cambia manualmente el tamaño de la ventana del navegador. Lo que significa que podría llamar a esta función docenas de veces en un corto intervalo de tiempo.
¿Cómo puedo llamar a la función de cambio de tamaño solo una vez (una vez que la ventana del navegador ha terminado de cambiar el tamaño)?
ACTUALIZAR
También sin tener que utilizar una variable global.
javascript
jquery
html
nickb
fuente
fuente
Respuestas:
Aquí hay un ejemplo usando las instrucciones de thejh
Puede almacenar una identificación de referencia para cualquier setInterval o setTimeout. Me gusta esto:
fuente
Rebote .
Tenga en cuenta que puede usar este método para cualquier cosa que desee eliminar (eventos clave, etc.).
Modifique el parámetro de tiempo de espera para obtener el efecto deseado óptimo.
fuente
func
, con elthis
puntero interno apuntando haciascope
y conArray.prototype.slice.call(args)
(que genera una matriz estándarargs
) como argumentosPuede usar
setTimeout()
yclearTimeout()
junto conjQuery.data
:Actualizar
Escribí una extensión para mejorar el controlador de eventos predeterminado
on
(&bind
) de jQuery. Adjunta una función de controlador de eventos para uno o más eventos a los elementos seleccionados si el evento no se activó durante un intervalo determinado. Esto es útil si desea activar una devolución de llamada solo después de un retraso, como el evento de cambio de tamaño, o bien. https://github.com/yckart/jquery.unevent.jsÚselo como cualquier otro controlador de eventos
on
obind
, excepto que puede pasar un parámetro adicional como último:http://jsfiddle.net/ARTsinn/EqqHx/
fuente
fuente
Solo para agregar a lo anterior, es común obtener eventos de cambio de tamaño no deseados debido a que las barras de desplazamiento aparecen y desaparecen, aquí hay un código para evitar eso:
ver jsfiddle
fuente
Underscore.js tiene un par de métodos excelentes para esta tarea:
throttle
ydebounce
. Incluso si no está utilizando Underscore, eche un vistazo a la fuente de estas funciones. He aquí un ejemplo:fuente
Este es mi enfoque:
Resize-event-listener captura todas las llamadas entrantes de cambio de tamaño, crea una función de tiempo de espera para cada una y guarda el identificador de tiempo de espera junto con un número iterativo antepuesto por
'id-'
(para ser utilizable como clave de matriz) en latos
matriz -array.cada vez, el tiempo de espera se dispara, llama a la función
fn
-que comprueba si ese fue el último tiempo de espera en latos
matriz (la función fn elimina cada tiempo de espera ejecutado). si es verdadero (=if(len-1 == 0)
), el cambio de tamaño ha finalizado.fuente
jQuery proporciona un
off
método para eliminar el controlador de eventosfuente