2012-01-09 6 views
1

J'ai tous mes éléments sur la page en position absolue, ce qui est tout entier. Et bien que Chrome indique la position correcte, par ex. top 100 à gauche 15, jQuery signaler une coordonnée très étrange top 99.99999332427979 gauche 15.454545021057129. Ce qui donne?jQuery signale une mauvaise position haut/gauche

EDIT: Pour des raisons inconnues, il est revenu à fonctionner parfaitement, en indiquant le nombre entier exact. Je ne sais vraiment pas ce qui se passe, mais ça doit avoir quelque chose à voir avec margin-top, margin-left, border-top-width et border-left-width, puisqu'ils sont analysés comme flottants dans jquery position() fonction. Dans mon cas, je ne fais aucune animation, donc ce problème n'est pas lié à l'animation

+1

L'animation est-elle exécutée sur l'élément dont vous obtenez la position? Cela ressemble à des erreurs d'arrondi de la méthode 'animate()'. –

+1

Nous ne pouvions pas savoir sans voir votre code. Assurez-vous que votre #wrapperDiv est position: relative; – SMacFadyen

+0

Comme les autres gars disent, nous ne pouvons pas aider à voir du code. Par exemple, .position() et .offset() donnent les coordonnées correctes dans [cet exemple] (http://jsfiddle.net/MV6Dh/) – Alex

Répondre

1

Juste une supposition, mais je pense que cela a quelque chose à voir avec les flottants et les calculs dans jQuery.

Float est un type de données qui contient des nombres. Soit des grands nombres ou des nombres avec beaucoup de décimales. En regardant les chiffres, je suis sûr que jQuery utilise des flotteurs.

Peu de choses sur les flotteurs: ils sont inexacts. TRÈS inexact ce qui entraîne souvent des numéros bizarres comme ceux-ci.

Il semble que Google utilise des types de données plus précis pour calculer les positions. Vous devez vous demander, pourquoi jQuery n'utilise pas un type de données précis? C'est en fait une question vraiment facile. jQuery utilise des calculs qui donnent des nombres décimaux (assouplissement, etc.) avec toutes sortes de formes de données (pixels, points, pourcentages, etc.). Si jQuery n'utilisait que des nombres entiers et que vous ne travailleriez qu'avec des pourcentages, vous obtiendriez une animation plutôt moche. C'est pourquoi je pense que jQuery utilise des flotteurs, et cela explique les chiffres douteux.

Enfin, la distance d'une animation jQuery est calculée en utilisant une distance et un temps. Disons que jQuery "met à jour" votre DOM 60 fois par seconde et que vous souhaitez déplacer votre élément de 60 pixels en une seule seconde, cela déplacerait votre élément d'un seul pixel sur chaque "mise à jour". Cependant, si vous souhaitez déplacer votre élément de 61 pixels en une seconde, vous n'avez pas à réfléchir pour savoir qu'il en résultera un nombre douteux ... Votre élément se déplacerait de 1,01666667 pixels par seconde. Cela explique aussi pourquoi je pense que jQuery utilise des flotteurs ...

Je crains que vous ne puissiez rien y faire. Vous pourriez juste arrondir les nombres.

+0

Oui, arrondir les chiffres est facile. Mais tout ce qui dépend de l'image-objet CSS semble bizarre. – Ethan

+0

Je ne pense pas qu'il y ait autre chose que vous puissiez faire, sauf si vous souhaitez réécrire jQuery ou savoir comment "corriger" le flottant étant inexact. –

+0

J'ai édité la question. – Ethan

Questions connexes