Update für 2017
Meine ursprüngliche Antwort wurde 2009 geschrieben. Während es noch funktioniert, möchte ich es für 2017 aktualisieren. Browser können sich immer noch anders verhalten. Ich vertraue darauf, dass das jQuery-Team hervorragende Arbeit bei der Aufrechterhaltung der browserübergreifenden Konsistenz leistet. Es ist jedoch nicht erforderlich, die gesamte Bibliothek einzuschließen. In der jQuery-Quelle befindet sich der relevante Teil in Zeile 37 von dimensions.js . Hier wird es extrahiert und geändert, um eigenständig zu arbeiten:
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
Ursprüngliche Antwort
Da sich alle Browser unterschiedlich verhalten, müssen Sie zuerst nach Werten suchen und dann den richtigen verwenden. Hier ist eine Funktion, die dies für Sie erledigt:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
und ähnlich für die Höhe:
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
Rufen Sie beide in Ihren Skripten mit getWidth()
oder auf getHeight()
. Wenn keine der nativen Eigenschaften des Browsers definiert ist, wird dieser zurückgegeben undefined
.
self.innerWidth 423
,document.documentElement.clientWidth 326
unddocument.body.clientWidth 406
. In diesem Fall Frage: Was ist richtig und welches zu verwenden? Zum Beispiel möchte ich die Größe von Google Map ändern. 326 oder 423 großer Unterschied. Wenn die Breite ~ 700 ist, dann siehe 759, 735, 742 (nicht so großer Unterschied)var pageWidth = Math.max(self.innerWidth || 0, document.documentElement.clientWidth || 0, document.body.clientWidth || 0);
undvar windowWidth = self.innerWidth || -1;
// wegen "body" oder "screen" oder "document" sind nicht das "Fenster", wenn Sie einen überfüllten HTML-Inhalt überprüfen, den Sie verstehen können. # i.stack.imgur.com/6xPdH.pnggetWidth()
Referenzenself.innerHeight
Es ist ein Schmerz im Arsch . Ich empfehle, den Unsinn zu überspringen und jQuery zu verwenden , damit Sie es einfach tun können
$(window).width()
.quelle
Beide geben Ganzzahlen zurück und erfordern keine jQuery. Browserübergreifend kompatibel.
Ich finde oft, dass jQuery ungültige Werte für width () und height () zurückgibt.
quelle
Warum erwähnt niemand matchMedia?
Habe nicht so viel getestet, aber mit Android Standard und Android Chrome Browsern, Desktop Chrome getestet, bis jetzt sieht es so aus, als ob es gut funktioniert.
Natürlich gibt es keinen Zahlenwert zurück, sondern einen Booleschen Wert - ob übereinstimmt oder nicht, passt also möglicherweise nicht genau zur Frage, aber das wollen wir trotzdem und wahrscheinlich will der Autor der Frage.
quelle
Von W3schools und seinem Cross-Browser zurück in die dunklen Zeiten des IE!
quelle
Hier ist eine kürzere Version der oben dargestellten Funktion:
quelle
Eine angepasste Lösung für die Antwort von JS of Travis:
quelle
Eine wichtige Ergänzung zu Travis 'Antwort; Sie müssen getWidth () in Ihren Dokumentkörper einfügen, um sicherzustellen, dass die Breite der Bildlaufleiste gezählt wird. Andernfalls wird die Breite der Bildlaufleiste des Browsers von getWidth () abgezogen. Was ich getan habe ;
und rufen Sie danach irgendwo eine aWidth-Variable auf.
quelle