jQuery x y document coordinates of DOM object

前端 未结 3 1860
陌清茗
陌清茗 2020-11-27 13:36

I need to get the X,Y coordinates (relative to the document\'s top/left) for a DOM element. I can\'t locate any plugins or jQuery property or method that can give these to

相关标签:
3条回答
  • 2020-11-27 13:57

    you can use Dimensions plugin [Deprecated... included in jQuery 1.3.2+]

    offset()
    Get the current offset of the first matched element, in pixels, relative to the document.

    position()
    Gets the top and left position of an element relative to its offset parent.

    knowing this, then it's easy... (using my little svg project as an example page)

    var x = $("#wrapper2").offset().left;
    var y = $("#wrapper2").offset().top;
    
    console.log('x: ' + x + ' y: ' + y);
    

    output:

    x: 53 y: 177
    

    hope it helps what you're looking for.

    here's an image of offset() and position()

    using XRay

    alt text

    using Web Developer toolbar

    alt text

    0 讨论(0)
  • 2020-11-27 14:08

    My solution is a plugin with "workarounds" :+D . But Works!

    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);
    
    0 讨论(0)
  • 2020-11-27 14:14

    The offset function will do that for you.

    Here is the example they give:

    var p = $("p:last");
    var offset = p.offset();
    p.html( "left: " + offset.left + ", top: " + offset.top );
    
    0 讨论(0)
提交回复
热议问题