2012-03-15 15 views
59

Tengo un elemento de desplazamiento en mi página (con el plugin jQuery jScrollPane). Lo que quiero lograr es una forma de desactivar la ventana de desplazamiento detectando el ancho de la ventana del navegador. Estoy haciendo un diseño receptivo y quiero que esta función de desplazamiento se desactive cuando el navegador tenga un ancho inferior. Puedo hacer que funcione cuando actualizo la página, pero cuando cambio el tamaño de la ventana del navegador, el valor del ancho no se actualiza al vuelo.jQuery: ¿Cómo detectar ancho de ventana sobre la marcha?

En este momento, si empiezo con una ventana que tiene 1000px de ancho y luego cambio el tamaño a 350px, la característica de desplazamiento permanece. Quiero que la característica de desplazamiento se cierre tan pronto como el ancho del navegador llegue a 440px.

Aquí está el código que tengo hasta ahora ..

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

$(window).resize(function() { 
    var windowsize = $(window).width(); 
}); 

if (windowsize > 440) { 
    //if the window is greater than 440px wide then turn on jScrollPane.. 
    $('#pane1').jScrollPane({ 
     scrollbarWidth:15, 
     scrollbarMargin:52 
    }); 
} 
+1

mover el código dentro de la devolución de llamada del 'resize', simplemente consejos de precaución, que desea estrangular la ejecución de' resize' para evitar la sobre llamándolo –

Respuesta

135

Cambiar una variable no se ejecuta mágicamente código dentro del if -bloque. Coloque el código común en una función, a continuación, enlazar el evento, y llamar a la función:

$(document).ready(function() { 
    // Optimalisation: Store the references outside the event handler: 
    var $window = $(window); 
    var $pane = $('#pane1'); 

    function checkWidth() { 
     var windowsize = $window.width(); 
     if (windowsize > 440) { 
      //if the window is greater than 440px wide then turn on jScrollPane.. 
      $pane.jScrollPane({ 
       scrollbarWidth:15, 
       scrollbarMargin:52 
      }); 
     } 
    } 
    // Execute on load 
    checkWidth(); 
    // Bind event listener 
    $(window).resize(checkWidth); 
}); 
+0

Gracias! Esto casi me funciona. Pero aquí hay un problema extraño ... cuando hago que la ventana del navegador sea inferior a 440 px, actualice la página, la función de desplazamiento no está allí (¡bien!). Cuando cambio el tamaño de la ventana a más de 440, la función de desplazamiento está allí (¡también es bueno!). Pero cuando cambio el tamaño de la ventana a menos de 440, la función de desplazamiento no desaparece (mal). – Dustin

+1

@DustinMcGrew Eso está definido por su lógica: cuando el ancho de la ventana es menor que 440, no ocurre nada (ni siquiera un reinicio). Deberías poder arreglar esto. De lo contrario, comparta más detalles sobre la aplicación de este código. –

+2

¡Ahhh tienes razón! Solo necesitaba agregar una instrucción else y llamar a la función jScrollPaneRemove(). Funcionando perfectamente ahora :) – Dustin

14

Pon tu si la condición dentro resize función:

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

$(window).resize(function() { 
    windowsize = $(window).width(); 
    if (windowsize > 440) { 
    //if the window is greater than 440px wide then turn on jScrollPane.. 
     $('#pane1').jScrollPane({ 
     scrollbarWidth:15, 
     scrollbarMargin:52 
     }); 
    } 
}); 
+0

una solución tan simple, sin embargo, no es obvio para este problema , Gracias. – Lizardx

0

No sé si esto útil para usted cuando se cambia el tamaño de su página:

$(window).resize(function() { 
     if(screen.width == window.innerWidth){ 
      alert("you are on normal page with 100% zoom"); 
     } else if(screen.width > window.innerWidth){ 
      alert("you have zoomed in the page i.e more than 100%"); 
     } else { 
      alert("you have zoomed out i.e less than 100%"); 
     } 
    }); 
0

A continuación se muestra lo que hice para ocultar un elemento Id cuando el tamaño de la pantalla es inferior a 768px, y aparece cuando está por encima de 768px. Funciona de maravilla.

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

if(screensize<=768){ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none'); 
      } 
} 
else{ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr("style"); 
      } 

} 
changething = function(screensize){ 
     if(screensize<=768){ 
      if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').css('display','none'); 
      } 
     } 
     else{ 
     if($('#column-d0f6e77c699556473e4ff2967e9c0251').length>0) 
      { 
       $('#column-d0f6e77c699556473e4ff2967e9c0251').removeAttr("style"); 
      } 

     } 
} 
$(window).resize(function() { 
var screensize= $(window).width(); 
    changething(screensize); 
}); 
Cuestiones relacionadas