使用 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
