Es gab schon immer viele Kompatibilitätsprobleme beim Abrufen des berechneten Stils von HTML-Elementen. Es gibt einige Unterschiede in jedem Browser, der die W3C-Standardmethode unterstützt: getComputedStyle(), während IE6/7/. 8 unterstützt die Standardmethode nicht, verfügt aber über private Eigenschaften, um sie zu implementieren: currentStyle, sowohl IE9 als auch Opera unterstützen sie. Mit diesen beiden Methoden und Attributen können grundsätzlich die meisten Anforderungen erfüllt werden.
Aber für adaptive Breite und Höhe können Sie den berechneten Wert nicht mit currentStyle erhalten. Sie können nur auto zurückgeben, und getComputedStyle() kann den berechneten Wert zurückgeben. Es gibt mehrere Möglichkeiten, dieses Problem zu lösen. Was ich mir vorher überlegt habe, war, den Füllwert von clientWidth/clientHeight zu subtrahieren, damit die berechnete Breite und Höhe in Browsern erhalten werden kann, die die Standardmethode nicht unterstützen. Vor ein paar Tagen habe ich gesehen, dass Situ Zhengmei eine andere Methode verwendet hat, indem er die Methode getBoundingClientRect() verwendet hat, um die Position des Elements auf der Seite zu ermitteln. Dann subtrahiert man rechts von links die Breite und unten minus oben die Höhe. Ich habe einige kleine Änderungen an seinem Code vorgenommen und der endgültige Code lautet wie folgt:
var val = elem.currentStyle[style];
if( val === 'auto' && (style === "width" || style === "height") ){
var rect = elem.getBoundingClientRect();
if( style === "width" ){
return rect.right - rect.left 'px';
}else{
return rect.bottom - rect.top 'px';
}
}
Rückgabewert;
}();
};
// Diese Methode aufrufen
var test = document.getElementById( 'test' ),
// Berechnete Breite abrufen
tWidth = getStyle( test, 'width' );
Neue Frage: Wenn die Breite oder Höhe des Elements em- oder %-Einheiten verwendet, ändert der von getComputedStyle() zurückgegebene Wert automatisch em oder % in px-Einheiten, currentStyle jedoch nicht, und wenn es sich um eine Schriftart handelt, wird die Größe verwendet em als Einheit und gibt 0em unter Opera zurück. Opera ist wirklich beängstigend!
Später habe ich während der Verwendung einige unerwartete Kompatibilitätsprobleme festgestellt. Heute habe ich den Originalcode optimiert und einige häufige Kompatibilitätsprobleme behoben.
In JavaScript stellt „-“ (Bindestrich oder Bindestrich) ein Minuszeichen dar, und in CSS haben viele Stilattribute dieses Symbol, wie z. B. padding-left, Schriftgröße usw. Wenn also Folgendes gilt Code erscheint in Javascript, es handelt sich um einen Fehler:
Für float ist es ein reserviertes Wort in JavaScript. Es gibt andere alternative Möglichkeiten, den Float-Wert eines Elements in JavaScript festzulegen oder abzurufen. In Standardbrowsern ist es cssFloat, und in IE6/7/8 ist es das styleFloat .
Wenn „oben“, „rechts“, „unten“ und „links“ keinen expliziten Wert haben, geben einige Browser beim Abrufen dieser Werte einen Auto-Wert zurück. Obwohl der Auto-Wert ein legaler CSS-Attributwert ist, ist er keineswegs das, was wir wollen Das Ergebnis sollte 0px sein.
Um die Transparenz von Elementen in IE6/7/8 festzulegen, müssen Sie Filter verwenden, wie zum Beispiel: filter:alpha(opacity=60). Bei Standardbrowsern unterstützt IE9 einfach beide Schreibmethoden Es wurde auch Kompatibilität zum Erhalten der Transparenz von Elementen implementiert. Solange Sie Opazität verwenden, können Sie die Transparenzwerte aller Browserelemente erhalten.
Das Ermitteln der Breite und Höhe von Elementen in IE6/7/8 wurde im vorherigen Artikel vorgestellt und wird hier nicht wiederholt. Beachten Sie außerdem, dass Sie, wenn der Stil des Elements mit „style inline“ geschrieben wurde oder das Stilattribut mit JavaScript festgelegt wurde, die folgende Methode verwenden können, um den berechneten Stil des Elements zu erhalten:
Diese Methode ist schneller als das Lesen des Attributwerts in getComputedStyle oder currentStyle und sollte zuerst verwendet werden. Voraussetzung ist natürlich, dass der Stil durch Inline-Schreiben festgelegt wird (es wird auch Javascript zum Festlegen des Inline-Stils verwendet). Der optimierte endgültige Code lautet wie folgt: