Zrób coś, jeśli szerokość ekranu jest mniejsza niż 960 pikseli

221

Jak sprawić, by jQuery coś zrobił, jeśli szerokość ekranu jest mniejsza niż 960 pikseli? Poniższy kod zawsze uruchamia drugi alert, niezależnie od rozmiaru mojego okna:

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

    alert('More than 960');
}
Evanss
źródło
1
Czy robisz to przy ładowaniu strony, czy też przy zmianie rozmiaru przeglądarki. Zawsze warto powiedzieć alert (screen.width), aby zobaczyć, co zostało użyte do podjęcia decyzji.
Farrukh Subhani,
1
Dlaczego nie zapytania medialne ?
bzlm 10.1011
3
Dlaczego nie zapytania medialne? Mogę wymyślić dowolną liczbę przypadków, w których zapytania medialne nie byłyby w ogóle pomocne. Jeśli jdln chce użyć jQuery, załóżmy, że ma ku temu dobry powód.
Luke
Istnieje wiele zastosowań, w których zapytania o media nie działają, np. Do aktywowania efektu muru tylko wtedy, gdy szerokość ekranu jest większa niż, powiedzmy, 1000 pikseli.
Pekka

Odpowiedzi:

449

Użyj jQuery, aby uzyskać szerokość okna.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
aziz punjani
źródło
11
Zauważ, że $ (window) .width () nie jest spójny w różnych przeglądarkach, jeśli pasek przewijania jest widoczny. Przekonałem się, że używanie zapytań o media javascript jest znacznie bardziej niezawodne.
forsvunnet
9
@forsvunnet Ten link jest martwy.
Shah Abaz Khan
2
Link do zapytań o media javascript: w3schools.com/howto/howto_js_media_queries.asp
Ivo Batis
137

Możesz połączyć to ze zdarzeniem zmiany rozmiaru:

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

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

Próbowałem http://api.jquery.com/off/ bez powodzenia, więc wybrałem flagę eventFired.

jk.
źródło
Zawijanie zdarzenia zmiany rozmiaru powoduje, że jest uruchamiane tylko przy zmianie rozmiaru, a nie przy obciążeniu.
Ted
5
@Ted Właśnie dlatego powiedziałem combine it with.
jk.
1
@RJ zobacz zmiany powyżej. Nie wiem, co masz na myśli, mówiąc „wyczyść” zdarzenie, więc postanowiłem uniemożliwić ponowne uruchomienie zdarzenia.
jk.
1
Fantastycznie, próbowałem przez kilka dni zastanawiać się, jak powiązać equalHeightsfunkcję przy zmianie rozmiaru, ale tylko dla szerokości większych niż 768. To działa jak urok. Dzięki
Danny Englander
1
Sensowne jest dodanie zdarzenia zmiany rozmiaru po tym kodzie, aby po załadowaniu, niezależnie od bieżącego rozmiaru przeglądarki, uruchomił potrzebny kod
BennKingy,
16

Polecam nie używać jQuery do takich rzeczy i kontynuować window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Daniel Kmak
źródło
1
dlaczego lepiej nie używać jQuery?
raison
1
@raison Uważam, że $ (okno) .width () nie będzie zawierać pasków przewijania - więc jeśli masz sekwencyjny ekran o rozdzielczości 960px, zwróci 944px, a twój plik js nie będzie działał zgodnie z przeznaczeniem. to rozwiązanie zwróci 960px
Sean T
14

Możesz także użyć zapytania medialnego z javascript.

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

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

źródło
11

Sugerowałbym (potrzebne 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 !');
  }
});

Dodano w CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Następnie możesz łatwo uzyskać szerokość okna za pomocą var: windowWidth i Height z: windowHeight

w przeciwnym razie uzyskaj bibliotekę js: http://wicky.nillia.ms/enquire.js/

moabi
źródło
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
źródło
9

posługiwać się

$(window).width()

lub

$(document).width()

lub

$('body').width()
Strzec
źródło
8

Wiem, że jestem spóźniony, aby odpowiedzieć na to pytanie, ale mam nadzieję, że pomoże to każdemu, kto ma podobny problem. Działa również, gdy strona jest odświeżana z dowolnego powodu.

$(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
źródło
1

Wypróbuj ten kod

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
źródło
-8

nie, nic z tego nie zadziała. Potrzebujesz tego !!!

Spróbuj tego:

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Saurav Chaudhary
źródło
3
Publikowanie linku nie jest odpowiedzią.
nedaRM
przepraszam, że się spieszyłem! Chwileczkę, robię to teraz ...
Saurav Chaudhary
Uwaga: jeśli screen.width (najlepiej przechwycony, document.body.clientWidthjeśli używasz waniliowej JS) to <= 960 (co oznacza tutaj instrukcję if), to jedyna inna opcja (ELSE to screen.width> 960), dlatego też użyj innej opcji, jeśli tutaj jest zbędna. użyć document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()lub jakiś wariant. Nie ma potrzeby, jeśli (zbędny kod)
Zargold