Faites quelque chose si la largeur de l'écran est inférieure à 960 px

221

Comment faire pour que jQuery fasse quelque chose si la largeur de mon écran est inférieure à 960 pixels? Le code ci-dessous déclenche toujours la 2e alerte, quelle que soit la taille de ma fenêtre:

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

    alert('More than 960');
}
Evanss
la source
1
Faites-vous cela lorsque la page se charge ou est-ce lorsque vous redimensionnez le navigateur. C'est toujours une bonne idée de dire alerte (screen.width) pour voir ce qui a été utilisé pour décider.
Farrukh Subhani
1
Pourquoi pas les requêtes des médias ?
bzlm
3
Pourquoi pas les requêtes des médias? Je peux penser à un certain nombre de cas où les requêtes des médias ne seraient d'aucune utilité. Si jdln veut utiliser jQuery, supposons qu'il a de bonnes raisons de le faire.
Luke
Il existe de nombreuses utilisations pour cela où les requêtes multimédias ne fonctionnent pas, par exemple pour activer un effet de maçonnerie uniquement si la largeur de l'écran est supérieure, disons, à 1000 pixels.
Pekka

Réponses:

449

Utilisez jQuery pour obtenir la largeur de la fenêtre.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
aziz punjani
la source
11
Notez que $ (window) .width () n'est pas cohérent entre les navigateurs si la barre de défilement est visible. J'ai constaté que l'utilisation de requêtes multimédias javascript est beaucoup plus fiable.
forsvunnet
9
@forsvunnet Ce lien est mort.
Shah Abaz Khan
2
Un lien vers les requêtes média javascript: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis
137

Vous voudrez peut-être le combiner avec un événement de redimensionnement:

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

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

J'ai essayé http://api.jquery.com/off/ sans succès, je suis donc allé avec le drapeau eventFired.

jk.
la source
L'encapsulage dans l'événement resize ne fait que le déclencher au redimensionnement, pas à la charge.
Ted
5
@Ted C'est pourquoi j'ai dit combine it with.
jk.
1
@RJ voir les modifications ci-dessus. Je ne sais pas ce que vous entendez par «effacer» un événement, alors j'ai décidé d'empêcher l'événement de se déclencher à nouveau.
jk.
1
Fantastique, j'essaie de comprendre depuis des jours comment lier une equalHeightsfonction lors du redimensionnement, mais uniquement pour des largeurs supérieures à 768. Cela fonctionne comme un charme. Merci
Danny Englander
1
Il est logique d'ajouter un événement de redimensionnement après ce code, de sorte que lors du chargement, quelle que soit la taille actuelle du navigateur, il exécute alors le code nécessaire
BennKingy
16

Je recommande de ne pas utiliser jQuery pour une telle chose et de procéder avec window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Daniel Kmak
la source
1
pourquoi ne pas utiliser jQuery?
raison
1
@raison Je trouve que $ (window) .width () n'inclura pas de barres de défilement - donc si vous avez un écran de 960px, il renverra 944px et votre js ne se déclenchera pas comme prévu. cette solution renverra 960px
Sean T
14

Vous pouvez également utiliser une requête multimédia avec javascript.

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

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

la source
11

Je suggérerais (jQuery nécessaire):

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

Ajouté dans CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Ensuite, vous pouvez facilement obtenir la largeur de la fenêtre avec var: windowWidth et Height avec: windowHeight

sinon, procurez-vous une bibliothèque js: http://wicky.nillia.ms/enquire.js/

moabi
la source
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
la source
9

utilisation

$(window).width()

ou

$(document).width()

ou

$('body').width()
Garde
la source
8

Je sais que je suis en retard pour répondre à cette question, mais j'espère que cela sera utile à quiconque a un problème similaire. Cela fonctionne également lorsque la page est actualisée pour une raison quelconque.

$(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
la source
1

Essayez ce code

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
la source
-8

non, rien de tout cela ne fonctionnera. Ce dont vous avez besoin c'est !!!

Essaye ça:

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Saurav Chaudhary
la source
3
Publier un lien n'est pas une réponse.
nedaRM
désolé, j'étais un peu pressé! Attendez une minute, je le fais en ce moment ...
Saurav Chaudhary
s'il vous plaît noter si screen.width (mieux capturé avec document.body.clientWidthsi vous utilisez vanilla JS) est <= 960 (ce qui signifie l'instruction if ici) alors la seule autre option (ELSE est screen.width> 960), donc utiliser else if here est redondant. utiliser document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()ou une variante. PAS besoin d'autre chose (code redondant)
Zargold