jQuery x y document coordinates of DOM object

前端 未结 3 1873
陌清茗
陌清茗 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 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);
    

提交回复
热议问题