2012-05-25 14 views

Respuesta

50
var width = $(window).width(); 
$(window).on('resize', function(){ 
    if($(this).width() != width){ 
     width = $(this).width(); 
     console.log(width); 
    } 
}); 
+0

esto es genial ... –

+0

¿Hay alguna forma de actuar solo cuando el ancho ha cambiado Y cuando es menor que un valor de píxel? P.ej. if ($ (ventana) .width() <500) combinado con el anterior? – Dan382

+1

El código anterior funciona, pero su rendimiento no es óptimo. El objeto de la ventana jQuery se crea varias veces, aunque podría hacerse solo una vez. Además, el nuevo ancho de las ventanas se calcula sin sentido varias veces. – Anton

16

se puede detectar tanto los acontecimientos y sólo hay que ejecutar código cuando se trata de un cambio de anchura:

var lastWidth = $(window).width(); 

$(window).resize(function(){ 
    if($(window).width()!=lastWidth){ 
     //execute code here. 
     lastWidth = $(window).width(); 
    } 
})   

y es posible que desee comprobar evento de eliminación de rebotes.

Debouncing impone que una función no se vuelva a llamar hasta que pase una cierta cantidad de tiempo sin que se llame. . Al igual que en "ejecutar esta función sólo si 100 milisegundos han transcurrido sin que se llama


Leer más:


1

También se puede utilizar este pequeño plugin de jQuery para esto: https://github.com/adjohnson916/jquery-resize-dimension

Mantiene su propio código más legible:

ResizeDimension.bind('width'); 
$(window).on('resize-width', function() { 
    console.log('resize-width event'); 
}); 

o simplemente:

$(window).resizeDimension('width', function() { 
    console.log('resize-width event'); 
}); 
4

A pesar de que ya hay un par de respuestas con soluciones de trabajo, este tipo de tarea es crítica para el rendimiento (el evento de cambio de tamaño de la ventana se desencadena muchas veces mientras el usuario cambia el tamaño de la ventana), por lo que le sugiero encarecidamente que cuide del rendimiento Por favor, eche un vistazo al código optimizado a continuación:

/* Do not waste time by creating jQuery object from window multiple times. 
* Do it just once and store it in a variable. */ 
var $window = $(window); 
var lastWindowWidth = $window.width(); 

$window.resize(function() { 
    /* Do not calculate the new window width twice. 
    * Do it just once and store it in a variable. */ 
    var windowWidth = $window.width(); 

    /* Use !== operator instead of !=. */ 
    if (lastWindowWidth !== windowWidth) { 
     // EXECUTE YOUR CODE HERE 
     lastWindowWidth = windowWidth; 
    } 
}); 

Plus, que podría estar interesado en la comprobación de los patrones Debounce/Throttle - que mejoran el rendimiento enormemente en casos como este.

Cuestiones relacionadas