2012-06-15 11 views
15

He escrito una secuencia de comandos muy básica para agregar/eliminar una clase en la carga o cuando se cambia el tamaño de una ventana.jquery, agregar/eliminar clase cuando el ancho de la ventana cambia

Me preguntaba si había una forma mejor de hacerlo o si es posible reducir las líneas de código.

Básicamente, quiero poder modificar los estilos cuando el sitio se ve en una pantalla más pequeña. Pensé que sería mejor agregar una nueva clase a la etiqueta html cuando estaba debajo de un cierto ancho ...

De todos modos aquí está mi código.

<script type="text/javascript"> 
$(document).ready(function() { 
    /* Check width on page load*/ 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {} 
}); 

$(window).resize(function() { 
    /*If browser resized, check width again */ 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {$('html').removeClass('mobile');} 
}); 

Gracias

Gillian

clases
+6

una de las opciones está utilizando Media Queries – undefined

Respuesta

2
function resize() { 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {$('html').removeClass('mobile');} 
} 

$(document).ready(function() { 
    $(window).resize(resize); 
    resize(); 
}); 
+0

Por alguna razón, este es el único que funcionó muy bien para mí. ¡Gracias! –

15

uso de los medios

@media screen and (max-width: 900px) { 
    .class { 
    width:800px; 

    } 
} 

@media screen and (max-width: 500px) { 
     .class { 
     width:450px; 

    } 
} 
+0

Me gusta mucho esta solución, ¡corta y simple! – iappwebdev

+0

No puedo explicar por qué, nunca aprendí a confiar en las consultas '@ media'. –

+0

pero debe tener una buena razón para convencerse de lo contrario – Rab

12

En primer lugar, DRY (No te repitas) su código mediante el uso de una función:

function checkWidth(init) 
{ 
    /*If browser resized, check width again */ 
    if ($(window).width() < 514) { 
     $('html').addClass('mobile'); 
    } 
    else { 
     if (!init) { 
      $('html').removeClass('mobile'); 
     } 
    } 
} 

$(document).ready(function() { 
    checkWidth(true); 

    $(window).resize(function() { 
     checkWidth(false); 
    }); 
}); 
+0

Realmente no necesita el '$ (document) .ready()' con el objeto 'window', y de todos modos su función' checkWidth() 'podría entrar donde configura el controlador '$ (window) .resize()'.Si necesita llamarlo más tarde fuera del alcance, siempre puede '$ (ventana) .resize()'. –

+0

En mi humilde opinión, creo que necesita '$ (documento) .ready()', porque en los dispositivos móviles, no funciona en la primera carga. Esta es solo mi experiencia, ¡así que tómalo con un grano de sal! –

38

Bueno, sé que llego tarde a la fiesta, pero vi algunas cosas como $(document).ready() que no eran realmente necesarias.

Trate de almacenar en caché sus selectores si los llama una y otra vez, a la var $window = $(window); Esto ayudará con el rendimiento. Uso una expresión de función para encapsular a Me quedo fuera del alcance global, pero aún tengo acceso a mis elementos seleccionados de jQuery en caché $window y $html.

(function($) { 
    var $window = $(window), 
     $html = $('html'); 

    $window.resize(function resize(){ 
     if ($window.width() < 514) { 
      return $html.addClass('mobile'); 
     } 

     $html.removeClass('mobile'); 
    }).trigger('resize'); 
})(jQuery); 

http://jsfiddle.net/userdude/rzdGJ/1

Probablemente un poco más limpio, más fácil de seguir:

(function($) { 
    var $window = $(window), 
     $html = $('html'); 

    function resize() { 
     if ($window.width() < 514) { 
      return $html.addClass('mobile'); 
     } 

     $html.removeClass('mobile'); 
    } 

    $window 
     .resize(resize) 
     .trigger('resize'); 
})(jQuery); 

http://jsfiddle.net/userdude/rzdGJ/2

+2

Un ejemplo de una BUENA RESPUESTA :) – arshad

+0

EXCELENTE respuesta impresionante funciona muy bien – Firefog

+0

¡Eres un salvavidas! – LOTUSMS

2

Este tema me molestaba durante un tiempo, en realidad. Por lo general, tengo varios tamaños para las transiciones. Escribí este un pensamiento que me gustaría compartir:

$(function() { 
    var pageTransitions = [['full',1600],['mobile',800],['tiny',400],['micro',0]]; // number shows minimum size - must be from high to low 
    function resize() { 
    var target = 0, 
     w = $(window).width(), 
     h = $('html'); 
    $.each(pageTransitions, function(index, pageTransition) { 
     if(w > pageTransition[1]) { 
      target = index; 
      return false; 
     } 
    }); 
    $.each(pageTransitions, function(index, pageTransition) { 
     h.removeClass(pageTransition[0]); 
    }); 
    h.addClass(pageTransitions[target][0]); 
    } 
    resize(); 
    jQuery(window).on('resize', function() { 
    resize(); 
    }); 
}); 

http://jsfiddle.net/mckinleymedia/ERZ3q/7/

4

También puede utilizar este método, creo que es muy claro a seguir:

$(window).on('resize', function(){ 
     var win = $(this); 
     if (win.width() < 514) { 

     $('html').addClass('mobile'); 

     } 
    else 
    { 
     $('html').removeClass('mobile'); 
    } 

}); 

Simple Method

+0

Debe tenerse en cuenta que esto solo agregará una clase en el tamaño, no en la carga de la página inicial – Nickfmc

Cuestiones relacionadas