Haga algo si el ancho de la pantalla es inferior a 960 px

221

¿Cómo puedo hacer que jQuery haga algo si el ancho de mi pantalla es inferior a 960 píxeles? El siguiente código siempre activa la segunda alerta, independientemente del tamaño de mi ventana:

if (screen.width < 960) {
    alert('Less than 960');
}
else {

    alert('More than 960');
}
Evanss
fuente
1
¿Estás haciendo esto cuando se carga la página o es cuando cambias el tamaño del navegador? Siempre es una buena idea decir alerta (screen.width) para ver qué se ha utilizado para decidir.
Farrukh Subhani
1
¿Por qué no consultas en los medios ?
bzlm
3
¿Por qué no consultas en los medios? Se me ocurren muchos casos en los que las consultas de los medios no serían de ninguna ayuda. Si jdln quiere usar jQuery, supongamos que tiene buenas razones para hacerlo.
Luke
Hay muchos usos para esto donde las consultas de medios no funcionan, por ejemplo, para activar un efecto de mampostería solo si el ancho de la pantalla es mayor que, digamos, 1000 píxeles.
Pekka

Respuestas:

449

Use jQuery para obtener el ancho de la ventana.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
aziz punjani
fuente
11
Tenga en cuenta que $ (window) .width () no es consistente en todos los navegadores si la barra de desplazamiento está visible. Descubrí que usar las consultas de medios de JavaScript es mucho más confiable.
forsvunnet
99
@forsvunnet Ese enlace está muerto.
Shah Abaz Khan
2
Un enlace a las consultas de medios de JavaScript: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis
137

Es posible que desee combinarlo con un evento de cambio de tamaño:

 $(window).resize(function() {
  if ($(window).width() < 960) {
     alert('Less than 960');
  }
 else {
    alert('More than 960');
 }
});

Para RJ:

var eventFired = 0;

if ($(window).width() < 960) {
    alert('Less than 960');

}
else {
    alert('More than 960');
    eventFired = 1;
}

$(window).on('resize', function() {
    if (!eventFired) {
        if ($(window).width() < 960) {
            alert('Less than 960 resize');
        } else {
            alert('More than 960 resize');
        }
    }
});

Intenté http://api.jquery.com/off/ sin éxito, así que fui con la bandera eventFired.

jk.
fuente
Ajustar en el evento de cambio de tamaño solo hace que se dispare al cambiar el tamaño, no a la carga.
Ted
55
@Ted Por eso dije combine it with.
jk.
1
@RJ ver ediciones arriba. No sé qué quieres decir con 'borrar' un evento, así que decidí evitar que el evento se dispare nuevamente.
jk.
1
Fantástico, he estado tratando de descubrir durante días cómo vincular una equalHeightsfunción en el cambio de tamaño, pero solo para anchos superiores a 768. Esto funciona de maravilla. Gracias
Danny Englander
1
Tiene sentido agregar un evento de cambio de tamaño después de ese código, de modo que en la carga, sea cual sea el tamaño actual del navegador, se ejecutará el código necesario
BennKingy
16

Recomiendo no usar jQuery para tal cosa y proceder con window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Daniel Kmak
fuente
1
¿Por qué mejor no usar jQuery?
Raison
1
@raison Encuentro que $ (window) .width () no incluirá barras de desplazamiento, por lo que si tiene un secreto de 960 px, devolverá 944 px y su js no se disparará como se esperaba. esta solución devolverá 960 px
Sean T
14

También puede usar una consulta de medios con javascript.

const mq = window.matchMedia( "(min-width: 960px)" );

if (mq.matches) {
       alert("window width >= 960px");
} else {
     alert("window width < 960px");
}

fuente
11

Sugeriría (se necesita jQuery):

/*
 * windowSize
 * call this function to get windowSize any time
 */
function windowSize() {
  windowHeight = window.innerHeight ? window.innerHeight : $(window).height();
  windowWidth = window.innerWidth ? window.innerWidth : $(window).width();

}

//Init Function of init it wherever you like...
windowSize();

// For example, get window size on window resize
$(window).resize(function() {
  windowSize();
  console.log('width is :', windowWidth, 'Height is :', windowHeight);
  if (windowWidth < 768) {
    console.log('width is under 768px !');
  }
});

Agregado en CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Entonces puede obtener fácilmente el ancho de la ventana con var: windowWidth y Height con: windowHeight

de lo contrario, obtenga una biblioteca js: http://wicky.nillia.ms/enquire.js/

moabi
fuente
11
// Adds and removes body class depending on screen width.
function screenClass() {
    if($(window).innerWidth() > 960) {
        $('body').addClass('big-screen').removeClass('small-screen');
    } else {
        $('body').addClass('small-screen').removeClass('big-screen');
    }
}

// Fire.
screenClass();

// And recheck when window gets resized.
$(window).bind('resize',function(){
    screenClass();
});
leymannx
fuente
9

utilizar

$(window).width()

o

$(document).width()

o

$('body').width()
Guardia
fuente
8

Sé que llego tarde para responder esto, pero espero que sea de alguna ayuda para cualquiera que tenga un problema similar. También funciona cuando la página se actualiza por cualquier motivo.

$(document).ready(function(){

if ($(window).width() < 960 && $(window).load()) {
        $("#up").hide();
    }

    if($(window).load()){
        if ($(window).width() < 960) {
        $("#up").hide();
        }
    }

$(window).resize(function() {
    if ($(window).width() < 960 && $(window).load()) {
        $("#up").hide();
    }
    else{
        $("#up").show();
    }

    if($(window).load()){
        if ($(window).width() < 960) {
        $("#up").hide();
        }
    }
    else{
        $("#up").show();
    }

});});
Veljko Stefanovic
fuente
1

Prueba este código

if ($(window).width() < 960) {
 alert('width is less than 960px');
}
else {
 alert('More than 960');
}

   if ($(window).width() < 960) {
     alert('width is less than 960px');
    }
    else {
     alert('More than 960');
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JIBIN BJ
fuente
-8

No, nada de esto funcionará. ¡Lo que necesitas es esto!

Prueba esto:

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Saurav Chaudhary
fuente
3
Publicar un enlace no es una respuesta.
nedaRM
lo siento, estaba un poco apurado! Espera un momento, lo estoy haciendo ahora ...
Saurav Chaudhary
tenga en cuenta que si screen.width (mejor capturado con document.body.clientWidthif usando vanilla JS) es <= 960 (es decir, la declaración if aquí), entonces la única otra opción (ELSE es screen.width> 960), por lo tanto, usar else si aquí es redundante. uso document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()o alguna variante. NO necesita más si (código redundante)
Zargold