zoukankan      html  css  js  c++  java
  • 用 Javascript 获取指定页面元素的位置


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

    }
  • 相关阅读:
    暑期学习录
    08管道命名符
    07输入输出重定向
    06grep与find命令详解
    05tar命令详解
    04文件目录管理命令
    03工作目录切换命令与文本文件编辑命令
    02系统状态检测命令
    01常用系统工作命令
    vue2.0细节剖析
  • 原文地址:https://www.cnblogs.com/niuniu502/p/778553.html
Copyright © 2011-2022 走看看