jQuery.info
Découvrir et utiliser jQuery, la librairie javascript du XXIIème siècle

Accueil du site > Plugins > Connaître la position d’un élément

Connaître la position d’un élément

vendredi 10 août 2007, par cam.lafit

Etendre les possibilités de jQuery afin de connaître les coordonnées X et Y d’une balise HTML.


Par défaut jquery ne permet pas de connaître la position d’un élément.

Ce qui est parfois gênant, lorsque, par exemple, on veut positionner un élément vis à vis d’un autre tel que des tooltips [1]

Utiliser les fonctions natives de javascript

En cherchant sur le net, nous trouvons assez rapidement ceci :

       function findPos(obj) {
                var curleft = obj.offsetLeft || 0;
                var curtop = obj.offsetTop || 0;
                while (obj = obj.offsetParent) {
                        curleft += obj.offsetLeft
                        curtop += obj.offsetTop
                }
                return {x:curleft,y:curtop};
        }

Comme vous pouvez le constater pas une once de jQuery, et pourtant ce code est issu d’un script [2] utilisant pleinement jQuery.

Si dans ce code on n’en trouve pas, c’est dû au fait que les méthodes offsetLeft, offsetTop, … sont des méthodes DOM propres à javascript. Ces méthodes ne sont pas accessibles directement par jQuery.

Etendre jQuery

Pour remédier à cela, il existe 2 fonction jQuery intéressantes :

  • $().get(val)
  • jQuery.fn.extend()

get() retourne un tableau d’objets DOM associés à l’objet jquery spécifié. Ainsi les fonctions DOM seront utilisables. extend() permet d’étendre jQuery pour offrir une nouvelle fonction aux différents objets jQuery.

Get

La fonction Get() retourne les éléments DOM à partir de jQuery. Par défaut Get() retourne un tableau des éléments DOM. Ainsi $('body').get(); retourne un tableau d’une seule entrée. Pour accéder à l’objet <body>, il faut donc faire $('body').get();

Extend()

La fonction extend()

En combinant le code précédent et ces 2 fonctions, nous obtenons :

       jQuery.fn.extend({
           findPos : function() {
               obj = $(this).get(0);
        var curleft = obj.offsetLeft || 0;
        var curtop = obj.offsetTop || 0;
        while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
        }
        return {x:curleft,y:curtop};
           }
       });

Un exemple d’utilisation :

   pos = $('body').findPos();
//retourne le coordonnées via
   alert(pos.x);
//et
   alert(pos.y);

Remarques

Ce code ne retourne pas d’objet jQuery, il sera donc impossible de chaîner d’autres fonctions. La fonction ne fonctionne que pour un élément unique.

Notes

[1] en français : bulles d’aide

[2] voir

Répondre à cet article