Estoy usando JQuery como tal:
$(window).resize(function() { ... });
Sin embargo, parece que si la persona redimensiona manualmente las ventanas de su navegador arrastrando el borde de la ventana para agrandarla / reducirla, el .resize
evento anterior se dispara varias veces.
Pregunta: ¿Cómo puedo llamar a una función DESPUÉS de que el tamaño de la ventana del navegador se haya completado (para que el evento solo se active una vez)?
javascript
jquery
sarah
fuente
fuente
Respuestas:
Aquí hay una modificación de la solución de CMS que se puede llamar en varios lugares en su código:
Uso:
La solución de CMS está bien si solo lo llama una vez, pero si lo llama varias veces, por ejemplo, si diferentes partes de su código configuran devoluciones de llamada separadas para cambiar el tamaño de la ventana, entonces fallará porque comparten la
timer
variable.Con esta modificación, proporciona una identificación única para cada devolución de llamada, y esas ID únicas se utilizan para mantener separados todos los eventos de tiempo de espera.
fuente
Prefiero crear un evento:
Así es como lo creas:
Podría tener esto en un archivo javascript global en alguna parte.
fuente
Utilizo la siguiente función para retrasar acciones repetidas, funcionará para su caso:
Uso:
La función de devolución de llamada que se le pasó, se ejecutará solo cuando la última llamada al retraso se haya realizado después de la cantidad de tiempo especificada; de lo contrario, se restablecerá un temporizador, lo encuentro útil para otros fines, como detectar cuándo el usuario dejó de escribir, etc. ..
fuente
$(window).resize
) porque todos compartirán latimer
variable. Vea mi respuesta a continuación para la solución propuesta.Si tiene instalado Underscore.js, podría:
fuente
Algunas de las soluciones mencionadas anteriormente no funcionaron para mí, a pesar de que son de uso más general. Alternativamente, he encontrado este que hizo el trabajo en cambiar el tamaño de la ventana:
fuente
Muchas gracias a David Walsh, aquí hay una versión vainilla del subrayado de rebote.
Código:
Uso simple:
Ref: http://davidwalsh.name/javascript-debounce-function
fuente
En realidad, como sé, no puede realizar algunas acciones exactamente cuando el cambio de tamaño está desactivado, simplemente porque no conoce las acciones de futuros usuarios. Pero puede suponer el tiempo transcurrido entre dos eventos de cambio de tamaño, por lo que si espera un poco más que este tiempo y no se realiza ningún cambio de tamaño, puede llamar a su función.
La idea es que usamos
setTimeout
y es id para guardarlo o eliminarlo. Por ejemplo, sabemos que el tiempo entre dos eventos de cambio de tamaño es de 500 ms, por lo tanto, esperaremos 750 ms.fuente
Declarar oyente globalmente retrasado:
Y a continuación, use oyentes para el
resized
evento que desee:fuente
Esto funciona para mi. Vea esta solución: https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
fuente
Complemento jQuery simple para el evento de cambio de tamaño de ventana demorado
SINTAXIS:
Agregar nueva función para cambiar el tamaño del evento
Elimine la función (declarando su ID) agregada anteriormente
Eliminar todas las funciones
USO:
SALIDA DE USO:
ENCHUFAR:
fuente
Suponiendo que el cursor del mouse regrese al documento después de cambiar el tamaño de la ventana, podemos crear un comportamiento similar al de la devolución de llamada con el evento onmouseover. No olvide que esta solución puede no funcionar para pantallas táctiles como se esperaba.
fuente
Esto es lo que he implementado:
$ (ventana) .resize (function () {setTimeout (someFunction, 500);});
podemos borrar el setTimeout si esperamos que el cambio de tamaño suceda menos de
500ms
Buena suerte...
fuente