Tun Sie etwas, wenn die Bildschirmbreite weniger als 960 Pixel beträgt


221

Wie kann ich jQuery dazu bringen, etwas zu tun, wenn meine Bildschirmbreite weniger als 960 Pixel beträgt? Der folgende Code löst immer die 2. Warnung aus, unabhängig von meiner Fenstergröße:

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

    alert('More than 960');
}

1
Tun Sie dies, wenn die Seite geladen wird, oder wenn Sie die Größe des Browsers ändern? Es ist immer eine gute Idee, Alert (screen.width) zu sagen, um zu sehen, was zur Entscheidung verwendet wurde.
Farrukh Subhani

1
Warum nicht Medienabfragen ?
Bzlm

3
Warum nicht Medienabfragen? Ich kann mir eine beliebige Anzahl von Fällen vorstellen, in denen Medienanfragen überhaupt nicht hilfreich wären. Wenn jdln jQuery verwenden möchte, nehmen wir an, dass er gute Gründe dafür hat.
Luke

Es gibt viele Verwendungszwecke, bei denen Medienabfragen nicht funktionieren, z. B. um einen Mauerwerkseffekt nur zu aktivieren, wenn die Bildschirmbreite größer als beispielsweise 1000 Pixel ist.
Pekka

Antworten:


449

Verwenden Sie jQuery, um die Breite des Fensters zu ermitteln.

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

11
Beachten Sie, dass $ (window) .width () in allen Browsern nicht konsistent ist, wenn die Bildlaufleiste sichtbar ist. Ich habe festgestellt, dass die Verwendung von Javascript-Medienabfragen viel zuverlässiger ist.
Forsvunnet

9
@forsvunnet Dieser Link ist tot.
Shah Abaz Khan

2
Ein Link zu Javascript-Medienabfragen: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis

137

Möglicherweise möchten Sie es mit einem Größenänderungsereignis kombinieren:

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

Für 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');
        }
    }
});

Ich habe http://api.jquery.com/off/ ohne Erfolg ausprobiert, also habe ich mich für die eventFired-Flagge entschieden.


Wenn Sie das Größenänderungsereignis einschließen, wird es nur beim Ändern der Größe ausgelöst, nicht beim Laden.
Ted

5
@ Ted Deshalb habe ich gesagt combine it with.
jk.

1
@RJ siehe Änderungen oben. Ich weiß nicht, was Sie unter "Löschen" eines Ereignisses verstehen, also habe ich verhindert, dass das Ereignis erneut ausgelöst wird.
jk.

1
Fantastisch, ich habe seit Tagen versucht herauszufinden, wie man eine equalHeightsFunktion beim Ändern der Größe bindet, aber nur für Breiten von mehr als 768. Dies funktioniert wie ein Zauber. Vielen Dank
Danny Englander

1
Es ist sinnvoll, nach diesem Code ein Größenänderungsereignis hinzuzufügen, damit beim Laden unabhängig von der aktuellen Größe des Browsers der erforderliche Code ausgeführt wird
BennKingy

16

Ich empfehle, jQuery für solche Dinge nicht zu verwenden und fortzufahren window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}

1
Warum sollte man jQuery besser nicht verwenden?
Existenzberechtigung

1
@raison Ich finde, dass $ (Fenster) .width () keine Bildlaufleisten enthält. Wenn Sie also einen Bildschirm mit 960 Pixel haben, wird 944 Pixel zurückgegeben und Ihr js wird nicht wie beabsichtigt ausgelöst. Diese Lösung gibt 960px zurück
Sean T

14

Sie können auch eine Medienabfrage mit Javascript verwenden.

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

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

11

Ich würde vorschlagen (jQuery benötigt):

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

In CodePen hinzugefügt: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Dann können Sie einfach die Fensterbreite mit var: windowWidth und Height mit: windowHeight ermitteln

Andernfalls erhalten Sie eine js-Bibliothek: http://wicky.nillia.ms/enquire.js/


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

9

verwenden

$(window).width()

oder

$(document).width()

oder

$('body').width()

8

Ich weiß, dass ich zu spät bin, um darauf zu antworten, aber ich hoffe, es hilft jedem, der ein ähnliches Problem hat. Es funktioniert auch, wenn die Seite aus irgendeinem Grund aktualisiert wird.

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

});});

1

Versuchen Sie diesen 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>


-8

Nein, nichts davon wird funktionieren. Was du brauchst ist das !!!

Versuche dies:

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

3
Das Posten eines Links ist keine Antwort.
NedaRM

Entschuldigung, ich hatte es eilig! Moment mal, ich mache es gerade ...
Saurav Chaudhary

Bitte beachten Sie, dass wenn screen.width (am besten mit document.body.clientWidthVanilla JS erfasst ) <= 960 ist (was hier die if-Anweisung bedeutet), die einzige andere Option (ELSE ist screen.width> 960) und daher else verwendet, wenn hier redundant ist. verwenden document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()oder eine Variante.
Keine
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.