js获取某个元素距离浏览器的边距

知识储备:

1.偏移参照(offsetParent):

  在理解偏移大小之前,首先要理解offsetParent。人们并没有把offsetParent翻译为偏移父级,而是翻译成定位父级,很大原因是offsetParent与定位有关

  定位父级offsetParent的定义是:与当前元素最近的经过定位(position不等于static)的父级元素,主要分为下列几种情况 

  【1】元素自身有fixed定位,offsetParent的结果为null

  当元素自身有fixed固定定位时,我们知道固定定位的元素相对于视口进行定位,此时没有定位父级,offsetParent的结果为null

  【2】元素自身无fixed定位,且父级元素都未经过定位,offsetParent的结果为<body>

  【3】元素自身无fixed定位,且父级元素存在经过定位的元素,offsetParent的结果为离自身元素最近的经过定位的父级元素

    【4】<body>元素的parentNode是null

2.偏移量(offset dimension):

          涉及到偏移量的主要是offsetLeft、offsetTop、offsetHeight、offsetWidth这四个属性。

【1】offsetWidth

  offsetWidth表示元素在水平方向上占用的空间大小,无单位(以像素px计)

【2】offsetHeight

  offsetHeight表示元素在垂直方向上占用的空间大小,无单位(以像素px计)

  [注意]如果存在垂直滚动条,offsetWidth也包括垂直滚动条的宽度;如果存在水平滚动条,offsetHeight也包括水平滚动条的高度

 【3】offsetTop

  offsetTop表示元素的上外边框至offsetParent元素的上内边框之间的像素距离

【4】offsetLeft

  offsetLeft表示元素的左外边框至offsetParent元素的左内边框之间的像素距离

解决方案

    我们可以先获取它的offset它这是相对父容器的距离。然后使用递归来层层获取上一级的offset。

var getOffsetLeft = function(obj){
              var tmp = obj.offsetLeft;
              var node= obj.offsetParent;
              while(node!= null){
              tmp += node.offsetLeft;
                node= node.offsetParent;
               }
            return tmp;
            }
   
      
var getOffsetTop =  function(obj){
               var tmp = obj.offsetTop;
               var node= obj.offsetParent;
             while(node!= null){
                tmp += node.offsetTop;
               node= node.offsetParent;
               }
                return tmp;
             }

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值