HTML之元素相对页面(视口)左上角的坐标

一. 绝对位置

  • 网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标。无论网页滚动条如何滚动,它都是不会变化的。
  • // 获取元素的绝对位置坐标(相对于页面左上角)
    function getElementPagePosition(element){
      //计算x坐标
      var actualLeft = element.offsetLeft;
      var current = element.offsetParent;
      while (current !== null){
        actualLeft += current.offsetLeft;
        current = current.offsetParent;
      }
      //计算y坐标
      var actualTop = element.offsetTop;
      var current = element.offsetParent;
      while (current !== null){
        actualTop += (current.offsetTop+current.clientTop);
        current = current.offsetParent;
      }
      //返回结果
      return {x: actualLeft, y: actualTop}
    }
    
  • 使用例子:
    var rect = getElementPagePosition(element);
    // 输出坐标
    console.log("元素的左上角相对于视口的坐标:", rect.x, rect.y);
    //滚动到该元素 (滚动到使该元素位置 x y 贴紧视口左上角)
    window.scrollTo({
     left: rect.x,
     top: rect.y,
     behavior:"smooth"
     });
    

二. 相对位置

  • 网页元素的相对位置,是指元素左上角相对于浏览器窗口可视区域(视区:viewport)左上角的坐标。它会随着滚动条滚动而变化。
  • // 获取元素的绝对位置坐标(像对于浏览器视区左上角)
    function getElementViewPosition(element){
      //计算x坐标
      var actualLeft = element.offsetLeft;
      var current = element.offsetParent;
      while (current !== null){
        actualLeft +=  (current.offsetLeft+current.clientLeft);
        current = current.offsetParent;
      }
      if (document.compatMode == "BackCompat"){
        var elementScrollLeft=document.body.scrollLeft;
      } else {
        var elementScrollLeft=document.documentElement.scrollLeft;
      }
      var left = actualLeft - elementScrollLeft;
      //计算y坐标
      var actualTop = element.offsetTop;
      var current = element.offsetParent;
      while (current !== null){
        actualTop += (current.offsetTop+current.clientTop);
        current = current.offsetParent;
      }
      if (document.compatMode == "BackCompat"){
        var elementScrollTop=document.body.scrollTop;
      } else {
        var elementScrollTop=document.documentElement.scrollTop;
      }
      var right = actualTop-elementScrollTop;
      //返回结果
      return {x: left, y: right}
    }
    
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值