Faça algo se a largura da tela for menor que 960 px

221

Como posso fazer o jQuery fazer algo se a largura da minha tela for menor que 960 pixels? O código abaixo sempre aciona o segundo alerta, independentemente do tamanho da minha janela:

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

    alert('More than 960');
}
Evanss
fonte
1
Você está fazendo isso quando a página é carregada ou quando redimensiona o navegador. É sempre uma boa idéia dizer alerta (screen.width) para ver o que foi usado para decidir.
Farrukh Subhani 10/10
1
Por que não consultas de mídia ?
bzlm
3
Por que não consultas de mídia? Posso pensar em vários casos em que as consultas da mídia não ajudariam em nada. Se o jdln quiser usar o jQuery, vamos supor que ele tenha boas razões para fazê-lo.
Luke
Existem muitos usos para isso, onde as consultas de mídia não funcionam, por exemplo, para ativar um efeito de alvenaria apenas se a largura da tela for maior que, digamos, 1000 pixels.
Pekka

Respostas:

449

Use jQuery para obter a largura da janela.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
aziz punjani
fonte
11
Observe que $ (window) .width () não é consistente entre os navegadores se a barra de rolagem estiver visível. Descobri que o uso de consultas de mídia javascript é muito mais confiável.
forsvunnet
9
@forsvunnet Esse link está morto.
Shah Abaz Khan
2
Um link para consultas de mídia javascript: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis
137

Você pode combiná-lo com um evento de redimensionamento:

 $(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');
        }
    }
});

Eu tentei http://api.jquery.com/off/ sem sucesso, então fui com a bandeira eventFired.

jk.
fonte
O agrupamento no evento de redimensionamento apenas o aciona no redimensionamento, não no carregamento.
Ted
5
@ Ted Foi por isso que eu disse combine it with.
jk.
1
@RJ veja as edições acima. Não sei o que você quer dizer com "limpar" um evento, então evitei que o evento fosse disparado novamente.
jk.
1
Fantástico, tenho tentado descobrir há dias como vincular uma equalHeightsfunção ao redimensionamento, mas apenas para larguras maiores que 768. Isso funciona como um encanto. Obrigado
Danny Englander 13/03
1
Faz sentido para adicionar um evento redimensionar depois que o código, de modo que em carga seja qual for o tamanho atual do navegador é que vai, em seguida, executar o código necessário
BennKingy
16

Eu recomendo não usar o jQuery para tal coisa e continue com window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Daniel Kmak
fonte
1
por que melhor não usar jQuery?
Raison
1
@raison Acho que $ (window) .width () não inclui barras de rolagem - por isso, se você tiver uma secreen de 960px, ela retornará 944px e seus js não serão acionados conforme o esperado. esta solução retornará 960px
Sean T
14

Você também pode usar uma consulta de mídia com javascript.

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

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

fonte
11

Eu sugeriria (jQuery necessário):

/*
 * 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 !');
  }
});

Adicionado no CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Então você pode obter facilmente a largura da janela com o var: windowWidth e Height com: windowHeight

caso contrário, obtenha uma biblioteca js: http://wicky.nillia.ms/enquire.js/

moabi
fonte
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
fonte
9

usar

$(window).width()

ou

$(document).width()

ou

$('body').width()
Guarda
fonte
8

Sei que estou atrasado para responder a isso, mas espero que ajude alguém que tenha um problema semelhante. Também funciona quando a página é atualizada por qualquer 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
fonte
1

Experimente 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
fonte
-8

não, nada disso vai funcionar. O que você precisa é isso !!!

Tente o seguinte:

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Saurav Chaudhary
fonte
3
A publicação de um link não é uma resposta.
NedaRM 18/09/2013
desculpe por isso eu estava meio que com pressa! Espere um minuto, eu estou fazendo isso agora ...
Saurav Chaudhary
observe se screen.width (melhor capturado com o document.body.clientWidthuso de vanilla JS) é <= 960 (significando a instrução if aqui) e a única outra opção (ELSE é screen.width> 960), portanto, usando else se aqui for redundante. use document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()ou alguma variante. Não há necessidade de else if (código redundante)
Zargold