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

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' ) {   
        return false ;   
    }   
    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);
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值