js获取DIV的位置坐标的三种方法!

本文介绍三种使用JavaScript获取页面中DIV元素位置坐标的方法,包括利用getBoundingClientRect(),自定义递归函数,以及兼容多种浏览器的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js获取DIV的位置坐标的三种方法!

      方法一:

 
var odiv=document.getElementById('divid');
alert(odiv.getBoundingClientRect().left);
alert(odiv.getBoundingClientRect().top);

  方法二:

 
    function CPos(x, y)
    {
        this.x = x;
        this.y = y;
    }
    /**
     * 得到对象的相对浏览器的坐标
     */
    function GetObjPos(ATarget)
    {
        var target = ATarget;
        var pos = new CPos(target.offsetLeft, target.offsetTop);
       
        var target = target.offsetParent;
        while (target)
        {
            pos.x += target.offsetLeft;
            pos.y += target.offsetTop;
           
            target = target.offsetParent
        }
        return pos;
    }
   
var obj =  document.getElementById('divid'
alert(GetObjPos(obj)['x'])//x坐标
alert(GetObjPos(obj)['y'])//y坐标

  方法三:

function getElementPos(elementId){   
    var ua = navigator.userAgent.toLowerCase();   
    var isOpera = (ua.indexOf('opera') != -1);   
    var isIE = (ua.indexOf('msie') != -1&& !isOpera); // not opera spoof   
    var el = document.getElementById(elementId);
    if(el.parentNode === null|| el.style.display == 'none') {   
        returnfalse;   
    }   
    var parent =null;   
    var pos = [];   
    var box;   
    if(el.getBoundingClientRect) //IE   
    {   
        box = el.getBoundingClientRect();   
        var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);   
        var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);   
        return {   
            x: box.left + scrollLeft,   
            y: box.top + scrollTop   
        };   
    }   
    else   
        if (document.getBoxObjectFor)// gecko       
        {   
            box = document.getBoxObjectFor(el);   
            var borderLeft = (el.style.borderLeftWidth) ? parseInt(el.style.borderLeftWidth) :0;   
            var borderTop = (el.style.borderTopWidth) ? parseInt(el.style.borderTopWidth) :0;   
            pos = [box.x - borderLeft, box.y - borderTop];   
        }   
        else // safari & opera       
        {   
            pos = [el.offsetLeft, el.offsetTop];   
            parent = el.offsetParent;   
            if (parent != el) {   
               while (parent) {   
                   pos[0] += parent.offsetLeft;   
                   pos[1] += parent.offsetTop;   
                   parent = parent.offsetParent;   
               }   
            }   
            if (ua.indexOf('opera') != -1|| (ua.indexOf('safari') != -1&& el.style.position == 'absolute'))
{   
               pos[0] -= document.body.offsetLeft;   
               pos[1] -= document.body.offsetTop;   
            }   
        }   
    if(el.parentNode) {   
        parent = el.parentNode;   
    }   
    else{   
        parent = null;   
    }   
    while(parent && parent.tagName != 'BODY'&& parent.tagName != 'HTML') {// account for any scrolled
ancestors   
        pos[0] -= parent.scrollLeft;   
        pos[1] -= parent.scrollTop;   
        if (parent.parentNode) {   
            parent = parent.parentNode;   
        }   
        else {   
            parent = null;   
        }   
    }   
    return{   
        x: pos[0],   
        y: pos[1]   
    };   
}
var xd = getElementPos("divid");
alert(xd.x);
alert(xd.y);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值