阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1548|回复: 0

[转帖] js获取页面元素位置函数

[复制链接]
  • TA的每日心情
    难过
    2017-7-9 18:37
  • 签到天数: 43 天

    [LV.5]常住居民I

    发表于 2008-12-11 14:13:32 | 显示全部楼层 |阅读模式
    用Javascript获取指定页面元素的位置是一个非常常见的需求,本文介绍的函数能够准确返回一个元素相对于整个文档左上角的坐标,即元素的 top 、left 的位置,而且能够兼容浏览器,相信对新手非常有用。

    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 pos=getElementPos("divId");
    alert("距左边距离"+ pos.x +",距上边距离"+pos.y);
    文章出处:http://www.diybl.com/course/1_we ... /2007104/76438.html
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表