通过javascript获取元素的位置

Joh*_*nny 11 javascript position margin absolute

我已经看过十几个脚本可以捕获页面中元素/对象的x和y位置.但是当网页在主体上使用边距或其他元素,绝对/相对元素(如此类似)时,我总是遇到捕捉x和y的问题.

无论使用什么边距或填充,是否有提供精确位置的解决方案.

:)

YOU*_*YOU 12

我使用以下代码移动div框以跟随此Web IME站点中的光标

function xy(x) {
    o = document.getElementById(x);
    var l =o.offsetLeft; var t = o.offsetTop;
    while (o=o.offsetParent)
        l += o.offsetLeft;
    o = document.getElementById(x);
    while (o=o.offsetParent)
        t += o.offsetTop;
    return [l,t];
}
Run Code Online (Sandbox Code Playgroud)

它返回一个数组[left,top],

  • 如果你可以在一个循环中同时获得`offsetLeft`和`offsetTop`,为什么要遍历DOM树两次? (11认同)
  • 无论身体边缘如何,这应该可以正常工作.确保您使用的是标准模式doctype.在Quirks中,所有的赌注都没有了. (2认同)

Pac*_*ier 10

获取确切的位置只是将offsetLefts和offsetTops递归地添加到offsetParents:

function getPos(ele){
    var x=0;
    var y=0;
    while(true){
        x += ele.offsetLeft;
        y += ele.offsetTop;
        if(ele.offsetParent === null){
            break;
        }
        ele = ele.offsetParent;
    }
    return [x, y];
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这个解决方案可能比上面的其他解决方案快两倍,因为我们只循环一次.


Say*_*Das 8

offsetParent和其他偏移函数是旧的...使用该getBoundingClientRect 函数...使用这个:

function getAbsPosition(element) {
   var rect = element.getBoundingClientRect();
   return {x:rect.left,y:rect.top}
}
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样使用它

<div style="margin:50px;padding:50px;" id="myEl">lol</div>
<script type="text/javascript">
    var coords = getAbsPosition( document.getElementById('myEl') );
    alert( coords.x );alert( coords.y );
</script>
Run Code Online (Sandbox Code Playgroud)

别担心...无论元素有多少边距、位置或填充,它总是有效

  • 这将根据当前滚动调整数字。因此,如果您向下滚动 50 像素,则会减少 50 像素。 (3认同)