JS如何检查滚动后元素是否可见

使用 jQuery 可以检查滚动后元素是否可见的方法之一。
这种方法认为没有水平滚动。

我们可以使用 $(window).scrollTop() 和 $(window).height() 获取窗口顶部的高度。

要获取元素顶部,请使用 $(elem).offset().top,并使用 $(elem).height() 作为高度。

<!DOCTYPE html>
<html>
  <head>
    <title>文档的标题</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
    <style>
      .largebox {
        height: 1500px;
      }
      .box {
        height: 400px;
      }
    </style>
  </head>
  <body>
    <div class="largebox">
      <div id="msg" style="position:fixed;left:30%;"></div>
      <div class="box">First box</div>
      <div id="box1" class="box1">Second box</div>
    </div>
    <script>
      function isVisible($el) {
        let docViewTop = $(window).scrollTop();
        let docViewBottom = docViewTop + $(window).height();
        let elTop = $el.offset().top;
        let elBottom = elTop + $el.height();
        return((elBottom <= docViewBottom) && (elTop >= docViewTop));
      }
      $(function() {
        $("#msg").text("#Second box  visible=" + isVisible($("#box1")));
        $(window).scroll(function() {
            $("#msg").text("Second box visible=" + isVisible($("#box1")));
          });
      });
    </script>
  </body>
</html>

我们可以调用一个实用程序函数,该函数接受我们正在搜索的元素并使元素完全或者部分可见:

function Utils() {
  //...
}
Utils.prototype = {
  constructor: Utils,
  elementInView: function (el, fullView) {
    let pageTop = $(window).scrollTop();
    let pageBottom = pageTop + $(window).height();
    let elTop = $(el).offset().top;
    let elBottom = elTop + $(el).height();
    if (fullView === true) {
      return ((pageTop < elTop) && (pageBottom > elBottom));
    } else {
      return ((elTop <= pageBottom) && (elBottom >= pageTop));
    }
  }
};
let Utils = new Utils();

用法如下:

let elementInView = Utils.elementInView($('#flyoutLeftContainer'), false);
if (elementInView) {
  console.log('In view');
} else {
  console.log('Out of view');
}

这仅适用于文档是可滚动元素的情况。

日期:2020-06-02 22:16:10 来源:oir作者:oir