美文网首页
获取元素离页面视口位置的区别

获取元素离页面视口位置的区别

作者: yongningfu | 来源:发表于2017-08-12 17:12 被阅读0次

我们知道,获取元素在页面视口中的位置,一共有两种方法,

一种为利用相对偏移的方法

function getOffsetPosition(ele) {
  var left = 0;
  var top =0;
  while(ele) {
      left += ele.offsetLeft;
      top += ele.offsetTop;
      ele = ele.offsetParent;
  }
  return {left, top}
}

一种为利用getBoundingClientRect

var rect = ele.getBoundingClientRect()
// rect --> {left, top, right, bottom}

上面这两种方式有和区别呢?

  1. 利用offset方法获取的值是静态的,即一旦这个元素存在dom中,它这个值就直接固定下来了了,它的top border外边框到值为 html元素的内边框border top, 它的left为border外边框left 到 html元素的的内边框 border left (即可用理解成相对于页面文档的位置)
  1. 利用getBoundingClientRect获取的值是动态的,它会实时的获取当前元素相于对应窗口视口的位置

举例说明吧

可以直接滚动分析数据

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
    html {
      margin-top: 50px;
    }
    body {
      margin-top: 20px;
      height: 1000px;
      background: yellow;
    }

    #container {
      width: 100px;
      height: 100px;
      overflow: scroll;
      overflow-x: hidden;
      background: green;
    }

    #scroll {
      background: red;
      height: 300px;
      width: 20px;
    }
    </style>
  </head>
<body>
  <div id="container">
    <div id="scroll">
    </div>
  </div>

<script type="text/javascript">

var c = document.getElementById("container");
var s = document.getElementById("scroll");

// 通过内滚动分析
c.onscroll = function() {
  console.log(s.offsetTop);
  console.log(s.getBoundingClientRect().top);
  
}

// 通过body滚动分析
document.body.onscroll = function() {
  console.log('offsetTop', s.offsetTop);
  console.log('boundingClientRect', s.getBoundingClientRect().top);
}

</script>

</body>
</html>

应用

如何判断一个元素是否可见呢?
简单判断一个元素是否在视口呢
方法1 现在 出现在视口中:

var viewportHeight = Math.max(document.documentElement.clientHeight, document.body.clientHeight);
var {top, bottom} = targetEle.getBoundingClientRect();
if (bottom > 0 && top < viewportHeight) {
  // 现在出现在视口中
}

方法2 曾经 出现在视口中;

var viewportHeight = Math.max(document.documentElement.clientHeight, document.body.clientHeight);
var scrollTop = document.body.scrollTop;
var top = getOffsetPosition(targetEle).top;
// 视口最低线在 元素 top 之下, 说明已经出现过视口中了
if ((viewportHeight + scrollTop - top) > 0) {
}

相关文章

  • 获取元素离页面视口位置的区别

    我们知道,获取元素在页面视口中的位置,一共有两种方法, 一种为利用相对偏移的方法 一种为利用getBounding...

  • JS & jQuery 获取元素位置尺寸

    jQuery 位置 offset: 获取匹配元素在当前视口的相对偏移 position: 获取匹配元素相对父元素的...

  • javascript dom元素位置相关方法

    获取dom元素的位置 获取viewport的高度,宽度 浏览器窗口的视口(viewport)高度(以像素为单位),...

  • 获取高度相关API

    获取页面已经滚动的高度: 获取body全部内容高度: 获取布局视口高度: 获取视图视口高度:

  • jquery尺寸相关,滚动事件

    获取和设置元素的尺寸 获取元素相对页面的绝对位置 获取浏览器可视区宽度高度 获取页面文档的宽度高度 获取页面滚动距...

  • 尺寸相关、滚动事件

    1、获取和设置元素的尺寸 2、获取元素相对页面的绝对位置 .offset()3、获取可视区高度 4、获取页面高度 ...

  • Javascript获取页面元素位置

    2016/02/02也看看DOM和BOM位置的问题。 body和html 一般这两个节点是重合的,不设置margi...

  • 10-CSS 相关操作

    CSS 相关操作 CSS()方法 位置 offset()获取匹配元素在当前视口的相对偏移。返回的对象包含两个整形属...

  • js中getBoundingClientRect()方法详解

    getBoundingClientRect获取元素位置 getBoundingClientRect用于获得页面中某...

  • 下拉加载刷新

    获取滚动条当前的位置 获取当前可视范围的高度 获取文档完整的高度 实现下拉刷新 获取页面元素的位置

网友评论

      本文标题:获取元素离页面视口位置的区别

      本文链接:https://www.haomeiwen.com/subject/itsjrxtx.html