js各浏览器兼容取的元素的位置X坐标 Y坐标

JS code:

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 = ;
    }
    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]};
}

 

posted @ 2013-09-24 15:47  老骆  阅读(1108)  评论(0编辑  收藏  举报