49 votes

Document jQuery xy coordonnées de l'objet DOM

Je dois obtenir les coordonnées X, Y (par rapport au haut / à gauche du document) pour un élément DOM. Je ne trouve pas de plug-in ni de propriété ou de méthode jQuery pouvant me les fournir. Je peux obtenir le haut et la gauche de l'élément DOM, mais cela peut être relatif à son conteneur / parent actuel ou au document.

92voto

balexandre Points 36115

vous pouvez utiliser les Dimensions plugin [Obsolète... inclus dans jQuery 1.3.2+]

offset()
Obtenir le décalage actuel de la première appariés élément, en pixels, par rapport au document.

position()
Obtient en haut et à gauche de la position d'un élément par rapport à son décalage parent.

sachant cela, il est alors facile... (à l'aide de mon petit svg projet comme un exemple de page)

var x = $("#wrapper2").offset().left;
var y = $("#wrapper2").offset().top;

console.log('x: ' + x + ' y: ' + y);

sortie:

x: 53 y: 177

espérons que cela aide à ce que vous cherchez.

voici une image d'offset() et la position()

à l'aide de XRay

alt text

à l'aide de Web Developer toolbar

alt text

7voto

EderBaum Points 74

Ma solution est un plugin avec "solutions de contournement": + D. Mais ça marche!

 jQuery.fn.getPos = function(){
        var o = this[0];
        var left = 0, top = 0, parentNode = null, offsetParent = null;
        offsetParent = o.offsetParent;
        var original = o;
        var el = o;
        while (el.parentNode != null) {
            el = el.parentNode;
            if (el.offsetParent != null) {
                var considerScroll = true;
                if (window.opera) {
                    if (el == original.parentNode || el.nodeName == "TR") {
                        considerScroll = false;
                    }
                }
                if (considerScroll) {
                    if (el.scrollTop && el.scrollTop > 0) {
                        top -= el.scrollTop;
                    }
                    if (el.scrollLeft && el.scrollLeft > 0) {
                        left -= el.scrollLeft;
                    }
                }
            }            
            if (el == offsetParent) {
                left += o.offsetLeft;
                if (el.clientLeft && el.nodeName != "TABLE") {
                    left += el.clientLeft;
                }
                top += o.offsetTop;
                if (el.clientTop && el.nodeName != "TABLE") {
                    top += el.clientTop;
                }
                o = el;
                if (o.offsetParent == null) {
                    if (o.offsetLeft) {
                        left += o.offsetLeft;
                    }
                    if (o.offsetTop) {
                        top += o.offsetTop;
                    }
                }
                offsetParent = o.offsetParent;
            }
        }
        return {
            left: left,
            top: top
        };
    };
 

Usage:

 var p = $("#wrapper2").getPos();
alert("top:"+p.top+"; left:"+p.left);
 

4voto

Jeff Davis Points 1999

La fonction offset le fera pour vous.

Voici l'exemple qu'ils donnent:

 var p = $("p:last");
var offset = p.offset();
p.html( "left: " + offset.left + ", top: " + offset.top );
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X