Así que actualmente uso algo como:
$(window).resize(function(){resizedw();});
Pero esto se llama muchas veces mientras continúa el proceso de cambio de tamaño. ¿Es posible atrapar un evento cuando termina?
Así que actualmente uso algo como:
$(window).resize(function(){resizedw();});
Pero esto se llama muchas veces mientras continúa el proceso de cambio de tamaño. ¿Es posible atrapar un evento cuando termina?
.one()
para que solo se ejecute después de que se haya realizado el cambio de tamaño y no una y otra vez?Respuestas:
Tuve suerte con la siguiente recomendación: http://forum.jquery.com/topic/the-resizeend-event
Aquí está el código para que no tenga que buscar en el enlace y la fuente de su publicación:
Gracias sime.vidas por el código!
fuente
new Date(-1E12)
, es decir, JSLint advierte sobre el uso00
.rtime: Date; .... if (+new Date() - +rtime < delta)
y en la función resizeend mecanografiada debe ser la función de flecha como estaresizeend=()=>
. Porque en la función resizeend,this
referencia al objeto de ventana.Puedes usar
setTimeout()
yclearTimeout()
Ejemplo de código en jsfiddle .
fuente
$(document)
, la detección del mouse se limitaría a los usuarios que ejecutan Microsoft Windows y versiones vulnerables de su Internet Explorer: iedataleak.spider.io/demoEste es el código que escribo según la respuesta de @Mark Coleman:
Gracias Mark!
fuente
resizeTimer
es una variable global, lo que significa que no está definidawindow
, por lo que es exactamente la misma que aquí, solo que este ejemplo es mejor ya que no necesita definir la variable externamente. y también tiene sentido agregar esta variable alwindow
objeto ya que ese es el objeto al que está vinculado el detector de eventos.Internet Explorer proporciona un evento resizeEnd . Otros navegadores activarán el evento de cambio de tamaño muchas veces mientras cambia el tamaño.
Aquí hay otras excelentes respuestas que muestran cómo usar setTimeout y .throttle ,.debounce métodos de lodash y subrayado, por lo que mencionaré el plugin jQuery de Ben Alman para reducir y eliminar el rebote que logra lo que buscas.
Supongamos que tiene esta función que desea activar después de un cambio de tamaño:
Ejemplo de aceleración
En el siguiente ejemplo,
onResize()
solo se llamará una vez cada 250 milisegundos durante el cambio de tamaño de una ventana.Ejemplo de rebote
En el siguiente ejemplo,
onResize()
solo se llamará una vez al final de una acción de cambio de tamaño de ventana. Esto logra el mismo resultado que @Mark presenta en su respuesta.fuente
Hay una solución elegante usando el Underscore.js Entonces, si lo está usando en su proyecto, puede hacer lo siguiente:
Esto debería ser suficiente :) Pero, si está interesado en leer más sobre eso, puede consultar la publicación de mi blog:
http://rifatnabi.com/post/detect-end-of-jquery-resize-event-using-underscore -debounce(deadlink)fuente
lodash
también proporcione estoUna solución es extender jQuery con una función, por ejemplo:
resized
Uso de la muestra:
$(window).resized(myHandler, 300);
fuente
Puede almacenar una identificación de referencia en cualquier setInterval o setTimeout. Me gusta esto:
Para hacer esto sin una variable "global", puede agregar una variable local a la función misma. Ex:
fuente
Puede usar
setTimeout()
yclearTimeout()
junto conjQuery.data
:Actualizar
Escribí una extensión para mejorar el controlador predeterminado
on
(&bind
) -event-handler 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 de lo contrario. https://github.com/yckart/jquery.unevent.jsUtilizarlo como cualquier otro
on
obind
-Evento manipulador, excepto que se puede pasar un parámetro adicional como último:http://jsfiddle.net/ARTsinn/EqqHx/
fuente
Hay un método mucho más simple para ejecutar una función al final del cambio de tamaño que calcular el tiempo delta entre dos llamadas, simplemente hazlo así:
Y el equivalente para Angular2 :
Para el método angular, use la
() => { }
notación ensetTimeout
para preservar el alcance, de lo contrario no podrá realizar llamadas a funciones ni usarlasthis
.fuente
Esta es una modificación del código de Dolan anterior, agregué una función que verifica el tamaño de la ventana al comienzo del cambio de tamaño y lo compara con el tamaño al final del cambio de tamaño, si el tamaño es mayor o menor que el margen ( por ejemplo, 1000) luego se recarga.
fuente
La respuesta de Mark Coleman es ciertamente mucho mejor que la respuesta seleccionada, pero si desea evitar la variable global para el ID de tiempo de espera (la
doit
variable en la respuesta de Mark), puede hacer una de las siguientes cosas:(1) Use una expresión de función invocada inmediatamente (IIFE) para crear un cierre.
(2) Use una propiedad de la función de controlador de eventos.
fuente
Escribí una pequeña función de envoltura por mi cuenta ...
Aquí está el uso:
fuente
fuente
Bueno, en lo que respecta al administrador de ventanas, cada evento de cambio de tamaño es su propio mensaje, con un comienzo y un final distintos, por lo que técnicamente, cada vez que se cambia el tamaño de la ventana, es el final.
Habiendo dicho eso, ¿tal vez quieres retrasar tu continuación? Aquí hay un ejemplo.
fuente
Aquí hay un script MUY simple para desencadenar un evento 'resizestart' y 'resizeend' en el objeto de la ventana.
No hay necesidad de perder el tiempo con fechas y horas.
La
d
variable representa el número de milisegundos entre los eventos de cambio de tamaño antes de activar el evento final de cambio de tamaño, puede jugar con esto para cambiar la sensibilidad del evento final.Para escuchar estos eventos todo lo que necesita hacer es:
reiniciar:
$(window).on('resizestart', function(event){console.log('Resize Start!');});
redimensionar:
$(window).on('resizeend', function(event){console.log('Resize End!');});
fuente
Esto es lo que uso para retrasar las acciones repetidas, se puede llamar en varios lugares en su código:
Uso:
fuente
dado que la respuesta seleccionada en realidad no funcionó ... y si no está usando jquery, aquí hay una función de acelerador simple con un ejemplo de cómo usarla con el cambio de tamaño de la ventana
fuente
esto funcionó para mí ya que no quería usar ningún complemento.
En el cambio de tamaño de la ventana, invoque "setFn", que obtiene el ancho de la ventana y lo guarda como "originalWindowSize". Luego invoque "checkFn", que después de 500 ms (o su preferencia) obtiene el tamaño actual de la ventana y compara el original con el actual, si no son iguales, entonces la ventana todavía se está redimensionando. No olvide eliminar los mensajes de la consola en producción, y (opcional) puede hacer que "setFn" se ejecute automáticamente.
fuente
Esto funcionó para lo que estaba tratando de hacer en Chrome. Esto no activará la devolución de llamada hasta 200 ms después del último evento de cambio de tamaño.
fuente
¡ACTUALIZAR!
Una mejor alternativa también creada por mí está aquí: https://stackoverflow.com/a/23692008/2829600 (admite "eliminar funciones")
POSTE ORIGINAL:
Escribí esta función simple para manejar el retraso en la ejecución, útil dentro de jQuery .scroll () y .resize () Entonces callback_f se ejecutará solo una vez para una cadena de identificación específica.
fuente
$(window).resize(function() { delay_exec('test1', 30, function() { ... delayed stuff here ... }); });
:? Código bastante limpio de lo contrario. Gracias por compartir. :)Eventos ResizeStart y ResizeEnd para ventana
http://jsfiddle.net/04fLy8t4/
Implementé la función que desencadena dos eventos en el elemento DOM del usuario:
Código:
fuente
fuente
No sé si mi código funciona para otros, pero realmente hace un gran trabajo para mí. Tengo esta idea analizando el código de Dolan Antenucci porque su versión no me funciona y realmente espero que sea útil para alguien.
fuente
Escribí una función que pasa una función cuando se envuelve en cualquier evento de cambio de tamaño. Utiliza un intervalo para que el cambio de tamaño incluso no esté creando constantemente eventos de tiempo de espera. Esto le permite funcionar independientemente del evento de cambio de tamaño que no sea una entrada de registro que debe eliminarse en producción.
https://github.com/UniWrighte/resizeOnEnd/blob/master/resizeOnEnd.js
}
fuente