¿Cómo puedo conectarme a un evento de cambio de tamaño de la ventana del navegador?
Hay una forma de escuchar jQuery para eventos de cambio de tamaño, pero preferiría no incluirlo en mi proyecto solo por este requisito.
javascript
dom-events
window-resize
Cuenta muerta
fuente
fuente
Respuestas:
jQuery solo está envolviendo el
resize
evento DOM estándar , por ejemplo.jQuery puede hacer algo de trabajo para asegurarse de que el evento de cambio de tamaño se active de manera consistente en todos los navegadores, pero no estoy seguro de si alguno de los navegadores difiere, pero le animo a que pruebe en Firefox, Safari e IE.
fuente
window.addEventListener('resize', function(){}, true);
window.onresize = () => { /* code */ };
o mejor:window.addEventListener('resize', () => { /* code */ });
En primer lugar, sé que el
addEventListener
método se ha mencionado en los comentarios anteriores, pero no vi ningún código. Como es el enfoque preferido, aquí está:Aquí hay una muestra de trabajo .
fuente
removeEventListener
.Nunca anule la función window.onresize.
En su lugar, cree una función para agregar un escucha de eventos al objeto o elemento. Esto comprueba y en caso de que los oyentes no funcionen, luego anula la función del objeto como último recurso. Este es el método preferido utilizado en bibliotecas como jQuery.
object
: el elemento u objeto de ventanatype
: cambiar el tamaño, desplazarse (tipo de evento)callback
: la referencia de funciónEntonces el uso es así:
o con una función anónima:
fuente
attachEvent
ya no es compatible. La forma preferida para el futuro esaddEventListener
.elem == undefined
. Es posible (aunque poco probable) que "indefinido" se defina localmente como algo más. stackoverflow.com/questions/8175673/…El evento de cambio de tamaño nunca debe usarse directamente, ya que se activa continuamente a medida que cambiamos el tamaño.
Use una función antirrebote para mitigar el exceso de llamadas.
window.addEventListener('resize',debounce(handler, delay, immediate),false);
Aquí hay un rebote común que flota alrededor de la red, aunque busca otros más avanzados como featuerd in lodash.
Esto se puede usar así ...
Nunca disparará más de una vez cada 200 ms.
Para cambios de orientación móvil, use:
Aquí hay una pequeña biblioteca que reuní para ocuparme de esto cuidadosamente.
fuente
(...arguments) => {...}
(o...args
para menos confusión) ya que laarguments
variable ya no está disponible en su alcance.Solución para 2018+:
Debe usar ResizeObserver . Es una solución nativa del navegador que tiene un rendimiento mucho mejor que usar el
resize
evento. Además, no solo admite el evento en eldocument
sino también en arbitrarioelements
.Actualmente, Firefox, Chrome y Safari lo admiten . Para otros navegadores (y más antiguos) debe usar un polyfill .
fuente
Creo que @Alex V ya proporcionó la respuesta correcta, pero la respuesta requiere cierta modernización, ya que tiene más de cinco años.
Hay dos problemas principales:
Nunca lo use
object
como nombre de parámetro. Es una palabra reservada. Dicho esto, la función proporcionada por @Alex V no funcionarástrict mode
.La
addEvent
función proporcionada por @Alex V no devuelveevent object
siaddEventListener
se usa el método. Se debe agregar otro parámetro a laaddEvent
función para permitir esto.NOTA: El nuevo parámetro to
addEvent
se ha hecho opcional para que la migración a esta nueva versión de función no interrumpa ninguna llamada previa a esta función. Todos los usos heredados serán compatibles.Aquí está la
addEvent
función actualizada con estos cambios:Un ejemplo de llamada a la nueva
addEvent
función:fuente
Gracias por hacer referencia a mi publicación de blog en http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html .
Si bien puede conectarse al evento de cambio de tamaño de la ventana estándar, encontrará que en IE, el evento se dispara una vez por cada movimiento X y una vez por cada movimiento del eje Y, lo que resulta en una tonelada de eventos que pueden tener un rendimiento impacto en su sitio si la representación es una tarea intensiva.
Mi método implica un breve tiempo de espera que se cancela en los eventos posteriores para que el evento no aparezca en su código hasta que el usuario haya terminado de cambiar el tamaño de la ventana.
fuente
fuente
La siguiente publicación de blog puede serle útil: Arreglar el evento de cambio de tamaño de ventana en IE
Proporciona este código:
fuente
Las soluciones mencionadas anteriormente funcionarán si todo lo que desea hacer es cambiar el tamaño de la ventana y solo la ventana. Sin embargo, si desea que el cambio de tamaño se propague a elementos secundarios, deberá propagar el evento usted mismo. Aquí hay un código de ejemplo para hacerlo:
Tenga en cuenta que un elemento hijo puede llamar
en el objeto de evento que se pasa como el primer Arg del evento de cambio de tamaño. Por ejemplo:
fuente
fuente
fuente