Obtenir le réel à virgule flottante de la largeur d'un élément
Je suis en utilisant jQuery (v1.7.1) et j'ai besoin d'obtenir l'absolu, floating-point de la largeur d'un élément, mais tout de jQuery largeur méthodes semblent être des arrondissements la valeur de la largeur.
Par exemple, si la largeur d'un élément a été 20.333333px
, jQuery largeur de la méthode renvoie 20
, j'.e en ignorant la valeur décimale.
Vous pouvez voir ce que je veux dire sur ce jsFiddle
Donc, ma question est: Comment puis-je obtenir la valeur à virgule flottante de la largeur d'un élément?
- double possible de Ne pas rond .largeur() en jQuery
- Voudrez peut-être consulter ici: stackoverflow.com/questions/4308989/... Semble le navigateur tronque les pixels, donc c'est probablement pas un problème avec le jquery.
- jquery largeur de la fonction de retour de valeur int ainsi, vous n'aurez jamais une valeur flottante. voir api.jquery.com/width
- Merci @JohnKoerner, je ne pouvais pas trouver cette question avant, mais je me demande encore si il pourrait être n'importe quelle solution? D'une certaine façon à récupérer le floating-point de la largeur d'un élément, puisque la propriété CSS ne semble pas être la tenue de celle-ci (Au-moins, quand je inspecter avec le Chrome de la console)
- merci à vous, jsfiddle.net/q5BQs/3 assez bien montre que les valeurs décimales sont totalement ignorés lors du rendu des éléments, bien que ces valeurs sont conservées sur le Chrome de la console.
- Quand quelque chose est affichée, elle ne peut être affichée sur un ensemble de pixels de la frontière. Il n'y a pas une telle chose comme un demi-pixel de largeur.
Vous devez vous connecter pour publier un commentaire.
Si vous avez déjà une référence à l'élément DOM, élément
.getBoundingClientRect
vous obtiendrez les valeurs que vous voulez.La méthode existe depuis Internet Explorer 4, et il est sûr à utiliser partout. Cependant, la
width
etheight
attributs n'existent que dans IE9+. Vous devez calculer si vous soutien à IE8 et ci-dessous:getBoundingClientRect
est 70% plus rapide quewindow.getComputedStyle
dans google Chrome, 28, et les différences sont plus importantes dans Firefox: http://jsperf.com/getcomputedstyle-vs-getboundingclientrectwidth
etheight
propriétés n'ont été introduites sur ie9. Donc, pour ie8 vous devez calculertop - bottom
etright - left
. Rien d'important, juste pour être tout à fait précis.bottom - top
en hauteur, sinon vous vous retrouverez avec un nombre négatif.display:inline
oudisplay:inline-block
. Si vous ne pouvez pas changer cela, vous aurez besoin d'ajouter une autre div wrapper, à l'intérieur de#inner
et autour de vos articles, qui possède l'un de cesdisplay
valeurs. jsfiddle.net/JoolsCaesar/z6bx2moh/21Essayez ceci:
Mis à jour le violon: http://jsfiddle.net/johnkoer/Z2MBj/18/
getBoundingClientRect
est jusqu'à 70% plus rapide quegetComputedStyle
et fournit les mêmes dimensions: jsperf.com/getcomputedstyle-vs-getboundingclientrectgetComputedStyle
renvoie une chaîne où quegetBoundingClientRect
renvoie un float.getBoundingClientRect
ne renvoie pas la même valeur quegetComputedStyle
, si l'élément est affecté par tout les transformations CSS puisgetBoundingClientRect
sera le retour de la transformée de valeur.getBoundingClientRect
renvoie des valeurs arrondies etgetComputedStyle
renvoie les valeurs à virgule flottante (une fois passé à traversparseFloat
) pour se débarrasser de la "px". jsfiddle.net/JoolsCaesar/z6bx2mohgetComputedStyle()
a été plus rapide quegetBoundingClientRect()