function viewport() {
var e = window, a="inner";
if (!('innerWidth' in window )) {
a="client";
e = document.documentElement || document.body;
}
return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };
}
Fest. Viel besser als $(document).width(); window.matchMedia() ist wahrscheinlich besser, aber es ist IE10+
– Bosworth99
21. Mai 2014 um 19:19 Uhr
Dies scheint nicht zu funktionieren, wenn das Fenster Bildlaufleisten hat und Ihre Medienabfragen die maximale Breite überprüfen, zumindest in Chrome. Das Überprüfen von CSS für ein Element, von dem Sie wissen, dass es von einer bestimmten Medienabfrage festgelegt wird, scheint jedoch zu funktionieren.
var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
Praktisch funktioniert es genauso wie die Antwort in @Michael Birds Antwort, aber es ist einfacher zu lesen.
Bearbeiten: Ich suchte nach einer Methode, um genau die gleiche Breite anzugeben, wie sie für CSS-Medienabfragen verwendet wird. Aber das vorgeschlagene funktioniert nicht perfekt auf Safari mit Bildlaufleisten, sorry. Am Ende habe ich modernizr.js in einer zentralen Funktion verwendet und im Rest des Codes überprüfe ich nur, ob der Anzeigetyp Mobil, Tablet oder Desktop ist. Da mich die Breite nicht interessiert, funktioniert das für mich gut:
getDisplayType = function () {
if (Modernizr.mq('(min-width: 768px)')){
return 'desktop';
}
else if (Modernizr.mq('(min-width: 480px)')){
return 'tablet'
}
return 'mobile';
};
Wenn document.documentElement nicht existiert, schlägt dieses Skript fehl. Vertrauen Sie w3schools nicht, sehen Sie w3fools.com
– ausi
28. März 2014 um 10:09 Uhr
@ausi: Wären Sie bitte so nett und ausführlicher als “vertraue w3schools nicht”? Ich kann das Problem bisher nicht erkennen. Siehe auch Browserübergreifende Probleme mit document.documentElement
– LarS
29. März 2014 um 21:48 Uhr
OK, es scheint keinen Browser zu geben, der das nicht hat document.documentElement. Wusste das nicht.
– ausi
30. März 2014 um 13:01 Uhr
window.innerWidth ist das, was Sie brauchen.
if (window.innerWidth < 768) funktioniert für 768 Haltepunkt in CSS
Warum ist es nicht die beste Antwort? Es ist extrem kurz und funktioniert ohne jQuery. Groß!
– Dzmitri Kulahin
13. Januar 2020 um 17:58 Uhr
Wenn in Safari die Medienabfrage für 768 Pixel ausgelöst wird, gibt window.innerWidth 783 (nicht 768) zurück.
– Benutzer0474975
4. November 2020 um 19:14 Uhr
Arsen Pjuskyulyan
Problemumgehung, die immer funktioniert und mit CSS-Medienabfragen synchronisiert wird.
Überprüfen Sie dann in JS den Stil, den Sie ändern, indem Sie in die Medienabfrage eintreten
if($('.check-media').width() == 768){
console.log('You are in (max-width: 768px)');
}else{
console.log('You are out of (max-width: 768px)');
}
Im Allgemeinen können Sie also jeden Stil überprüfen, der geändert wird, indem Sie eine bestimmte Medienabfrage eingeben.
Meine Erfahrung war, dass die Breite der Medienabfrage document.body.clientWidth verfolgt. Aufgrund des Kommens und Gehens einer vertikalen Bildlaufleiste kann die Überprüfung von document, window oder viewport().width dazu führen, dass mein Javascript zu spät ausgeführt wird – nachdem sich die Medienabfrageregel geändert hat, abhängig von der Höhe des Fensters.
Durch die Überprüfung von document.body.clientWidth konnte mein Skriptcode konsistent ausgeführt werden, während die Medienabfrageregel wirksam wurde.
@media (Mindestbreite: 873px) {
//einige Regeln
}
…
if ( document.body.clientWidth >= 873) {
// etwas Code
}
Der Code von Andy Langton hat mich darauf gebracht – danke!
Wenn der Körper breiter als der Bildschirm ist, funktioniert dies nicht. Ich habe Lösungen gesehen, bei denen ein unsichtbares div fest positioniert ist und seine Breite auf 100% eingestellt ist. Die Verwendung von clientWidht sollte funktionieren.
– LarS
29. März 2014 um 22:01 Uhr
Hallo, ich verwende diesen kleinen Trick, damit JS und CSS auf responsiven Seiten problemlos zusammenarbeiten:
Testen Sie die Sichtbarkeit eines Elements, das unter der Bedingung CSS @media size angezeigt wird oder nicht. Mit Bootstrap CSS teste ich die Sichtbarkeit eines versteckten xs-Klassenelements
var msg = "a message for U";
/* At window load check initial size */
if ( $('#test-xsmall').is(':hidden') ) {
/* This is a CSS Xsmall situation ! */
msg = "@media CSS < 768px. JS width = " + $(window).width() + " red ! ";
$('.redthing-on-xsmall').addClass('redthing').html(msg);
} else {
/* > 768px according to CSS */
msg = "@media CSS > 767px. JS width = " + $(window).width() + " not red ! ";
$('.redthing-on-xsmall').removeClass('redthing').html(msg);
}
/* And again when window resize */
$(window).on('resize', function() {
if ($('#test-xsmall').is(':hidden')) {
msg = "@media CSS < 768px. JS width = " + $(window).width() + " red ! ";
$('.redthing-on-xsmall').addClass('redthing').html(msg);
} else {
msg = "@media CSS > 767px. JS width = " + $(window).width() + " not red ! ";
$('.redthing-on-xsmall').removeClass('redthing').html(msg);
}
});
@media (min-width: 768px) {
.hidden-xs {
display: block !important;
}
}
@media (max-width: 767px) {
.hidden-xs {
display: none !important;
}
}
.redthing-on-xsmall {
/* need a scrollbar to show window width diff between JS and css */
min-height: 1500px;
}
.redthing {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- the CSS managed Element that is tested by JS -->
<!-- class hidden-xs hides on xsmall screens (bootstrap) -->
<span id="test-xsmall" class="hidden-xs">THIS ELEMENT IS MANAGED BY CSS HIDDEN on @media lower than 767px</span>
<!-- the responsive element managed by Jquery -->
<div class="redthing-on-xsmall">THIS ELEMENT IS MANAGED BY JQUERY RED on @media max width 767px </div>
Wenn der Körper breiter als der Bildschirm ist, funktioniert dies nicht. Ich habe Lösungen gesehen, bei denen ein unsichtbares div fest positioniert ist und seine Breite auf 100% eingestellt ist. Die Verwendung von clientWidht sollte funktionieren.
– LarS
29. März 2014 um 22:01 Uhr
Paul Ghiran
Die CSS-Medienabfrage ist gleich window.innerWidth. CSS Media Queries berechnen auch die Bildlaufleiste.
10179100cookie-checkCSS-Medienabfragen und jQuery-Fenster .width() stimmen nicht übereinyes