Werfen Sie einen Blick auf Element.getBoundingClientRect()
.
Diese Methode gibt ein Objekt zurück, das die width
, height
und einige andere nützliche Werte:
{
width: 960,
height: 71,
top: 603,
bottom: 674,
left: 360,
right: 1320
}
Zum Beispiel:
var element = document.getElementById('foo');
var positionInfo = element.getBoundingClientRect();
var height = positionInfo.height;
var width = positionInfo.width;
Ich glaube, dass dies nicht die Probleme hat, die .offsetWidth
y .offsetHeight
tun, wohin sie manchmal zurückkehren 0
(wie im Abschnitt Kommentare hier )
Ein weiterer Unterschied ist getBoundingClientRect()
kann Bruchteile von Pixeln zurückgeben, wobei .offsetWidth
y .offsetHeight
rundet auf die nächste Ganzzahl.
IE8 Hinweis : getBoundingClientRect
gibt Höhe und Breite nicht zurück bei IE8 und darunter.*
Wenn Sie muss IE8 unterstützen, verwenden Sie .offsetWidth
y .offsetHeight
:
var height = element.offsetHeight;
var width = element.offsetWidth;
Es ist erwähnenswert, dass das von dieser Methode zurückgegebene Objekt nicht wirklich ein normal Objekt. Seine Eigenschaften sind nicht aufzählbar (also zum Beispiel, Object.keys
funktioniert nicht ohne weiteres).
Weitere Informationen hierzu finden Sie hier: Wie konvertiert man am besten ein ClientRect / DomRect in ein einfaches Objekt?
Referenz:
18 Stimmen
Beachten Sie, dass die Höhe eines Elements durch jede Methode hat immer eine Performance-Auswirkungen da er den Browser dazu bringt, die Position aller Elemente auf der Seite neu zu berechnen (Reflow). Vermeiden Sie es daher, dies zu oft zu tun. Zur Kasse diese Liste was für Dinge einen Reflow auslösen.