2011-04-04 10 views
22

Acabo de notar que el evento de cambio de tamaño de jquery se dispara dos veces cada vez que se cambia el tamaño de la ventana del navegador. No puedo encontrar ninguna documentación que indique esto como el comportamiento predeterminado. He probado esto en las últimas versiones de Chrome y Firefox, usando jQuery 1.4 y 1.5.¿Por qué jQuery cambia el tamaño del evento al fuego dos veces?

Qué nadie más vea este comportamiento? ¿Hay alguna razón específica para ello?

Actualización: Esto ocurre si hago clic en el botón Maximizar en la ventana del navegador una vez. Entiendo que si estoy arrastrando manualmente la ventana a un tamaño diferente, el evento se disparará varias veces, pero ese no debería ser el caso con el botón Maximizar.

El código utilizado prueba de esto es abajo. El texto del navegador redimensionada se emite dos veces:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
</head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script> 
<script type="text/javascript"> 
    $(window).resize(function(){ 
     console.log('Browser Resized'); 
    }); 
</script> 
<body> 

</body> 
</html> 
+1

sensación de la tripa, y esto es realmente ** ** sólo una sensación de la tripa, es que el cambio de tamaño un objeto cambia tanto su longitud y anchura . ¿Tal vez el evento de "cambio de tamaño" dispara para el cambio en cada eje? – tobias86

+0

Creo que se dispara dos veces cuando se carga la página porque el evento se crea una instancia antes de que el navegador analice los elementos. El evento de cambio de tamaño se dispara cuando se crean los elementos. Solo una teoría pero posible. ¿Qué piensas? – www139

Respuesta

8

Esto no es un problema de jQuery. Depende de la implementación del navegador. El navegador decide cuándo activar 'cambiar tamaño'. Y puede usar window.onresize = function() {...} para probar. Será lo mismo. Nada que ver con jQuery. Probé en Win7 Chrome, se disparó dos veces y en Win7 Opera/Safari se disparó una vez.

+0

Acabo de probar en la opera 11.52 y el evento se dispara dos veces en mi máquina. –

+2

¿Cómo lo has probado? El mío es Opera 11.52, Win7, y cambio el tamaño de la ventana al alternar el botón de maximizar. También solo se llama una vez en Safari 5.11.Y con Mac OS 10, safari, el evento de cambio de tamaño se dispara varias veces (mucho más que 2) al hacer clic en el botón Maximizar. Es una cuestión de implementación. El navegador decide cuándo activar 'cambiar tamaño'. Y puede usar window.onresize = function() {...}. Es lo mismo. Nada que ver con jQuery :) –

-1

He probado el presente caso, y me da dos llamadas también. Así que creo, etc ... Es esto un error, no lo es, se trata de una llamada a la función antes/después agrupado ... Y vuelvo a la documentación de jQuery 'de cambio de tamaño():

El código en un controlador de cambio de tamaño nunca debe depender del número de veces que se llama al controlador. Dependiendo de la implementación, los eventos de cambio de tamaño pueden enviarse continuamente a medida que el cambio de tamaño está en progreso (el comportamiento típico en Internet Explorer y navegadores basados ​​en WebKit como Safari y Chrome) o solo una vez al final de la operación de cambio de tamaño (el comportamiento típico en algunos otros navegadores como Opera).

Cualquier otra palabra necesaria?

+0

Gracias a Nathan Tuggy, por corregir errores tipográficos;) –

0

Aquí es una solución simple al problema utilizando setTimeout.

jQuery

var resizeTimeout 
$(window).resize(function(){ 
    clearTimeout(resizeTimeout) 
    resizeTimeout = setTimeout(function(){ 
     console.log("resized") 
    },100) 
}); 

JavaScript

var resizeTimeout 
window.addEventListener("resize", function(){ 
    clearTimeout(resizeTimeout) 
    resizeTimeout = setTimeout(function(){ 
     console.log("resized") 
    },100) 
}) 
Cuestiones relacionadas