Ich habe mich umgesehen und konnte das nicht finden. Ich versuche, die Breite eines Div zu ermitteln, aber wenn es einen Dezimalpunkt hat, rundet es die Zahl.
Beispiel:
#container{
background: blue;
width: 543.5px;
height: 20px;
margin: 0;
padding: 0;
}
Wenn ich das tue $('#container').width();
, wird 543 statt 543.5 zurückgegeben. Wie kann ich erreichen, dass die Zahl nicht gerundet wird und die volle 543.5 (oder welche Zahl auch immer) zurückgegeben wird?
javascript
jquery
css
MoDFoX
quelle
quelle
Antworten:
Verwenden Sie den nativen
Element.getBoundingClientRect
und nicht den Stil des Elements. Es wurde in IE4 eingeführt und wird von allen Browsern unterstützt:Hinweis: Informationen zu IE8 und niedriger finden Sie in den Hinweisen zu "Browserkompatibilität" in den MDN-Dokumenten.
Code-Snippet anzeigen
quelle
width
undheight
nicht in allen IE-Versionen unterstützt. In einigen Fällen müssen sie daher berechnet werden, bevor sie verwendet werden können: stackoverflow.com/questions/11907514/…getBoundingClientRect()
die Dimensionen nach dem Anwenden von CSS-Transformationen berechnet werden .display: none
) nicht funktioniert .Ich wollte hier nur meine Erfahrung hinzufügen, obwohl die Frage alt ist: Der obige Konsens scheint zu sein, dass die Rundung von jQuery genauso gut ist wie eine ungerundete Berechnung - aber das scheint bei etwas, das ich getan habe, nicht der Fall zu sein .
Mein Element hat im Allgemeinen eine flüssige Breite, aber der Inhalt ändert sich dynamisch über AJAX. Vor dem Wechseln des Inhalts sperre ich vorübergehend die Abmessungen des Elements, damit mein Layout während des Übergangs nicht herumspringt. Ich habe festgestellt, dass mit jQuery wie folgt:
verursacht etwas Spaß, als ob es Subpixel-Unterschiede zwischen der tatsächlichen Breite und der berechneten Breite gibt. (Insbesondere wird ein Wort von einer Textzeile zur nächsten springen, das angibt, dass die Breite geändert und nicht nur gesperrt wurde.) Aus einer anderen Frage - Ermitteln der tatsächlichen Gleitkommabreite eines Elements - habe ich herausgefunden out,
window.getComputedStyle(element).width
das eine ungerundete Berechnung zurückgibt. Also habe ich den obigen Code in so etwas wie geändertUnd mit DIESEM Code - kein lustiges Hüpfen! Diese Erfahrung scheint darauf hinzudeuten , dass der unrounded Wert tatsächlich tut Angelegenheit an den Browser, nicht wahr? (In meinem Fall Chrome Version 26.0.1410.65.)
quelle
Die Antwort von Ross Allen ist ein guter Ausgangspunkt, aber bei Verwendung von getBoundingClientRect (). Width werden auch die Auffüllung und die Rahmenbreite berücksichtigt, was bei der Breitenfunktion der Abfrage nicht der Fall ist :
Wenn Sie den
width
Wert präzise ermitteln möchten, müssen Sie die Polsterung und den Rand folgendermaßen entfernen:quelle
.replace("px", "")
alsparseInt
sollte das für Sie entfernen.parseFloat()
vielleicht?innerWidth()
Teil des ursprünglichen Problems zu sein, fürchte ich , dass die Rahmenbreite hier Berechnung auch auf gerundeten Werten arbeitet.Sie können dafür verwenden
getComputedStyle
:quelle
Verwenden Sie Folgendes, um eine genaue Breite zu erhalten:
quelle
style.width