滚动后检查元素是否可见
我通过AJAX加载元素。 其中一些只有在向下滚动页面时才可见。
有什么方法可以知道元素是否在页面的可见部分?
这应该可以做到这一点:
function isScrolledIntoView(elem)
{
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
简单的实用程序功能这将允许您调用一个实用程序函数,该函数接受您正在查找的元素,并且您希望元素完全处于视图中或部分视图中。
function Utils() {
}
Utils.prototype = {
constructor: Utils,
isElementInView: function (element, fullyInView) {
var pageTop = $(window).scrollTop();
var pageBottom = pageTop + $(window).height();
var elementTop = $(element).offset().top;
var elementBottom = elementTop + $(element).height();
if (fullyInView === true) {
return ((pageTop < elementTop) && (pageBottom > elementBottom));
} else {
return ((elementTop <= pageBottom) && (elementBottom >= pageTop));
}
}
};
var Utils = new Utils();
用法
var isElementInView = Utils.isElementInView($('#flyout-left-container'), false);
if (isElementInView) {
console.log('in view');
} else {
console.log('out of view');
}
Vanilla的这个答案:
function isScrolledIntoView(el) {
var rect = el.getBoundingClientRect();
var elemTop = rect.top;
var elemBottom = rect.bottom;
// Only completely visible elements return true:
var isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
// Partially visible elements return true:
//isVisible = elemTop < window.innerHeight && elemBottom >= 0;
return isVisible;
}
到目前为止,我发现的最好的方法是jQuery插件。 奇迹般有效。
模仿自定义的“出现”事件,当元素滚动到视图中或以其他方式变为用户可见时触发该事件。
$('#foo').appear(function() {
$(this).text('Hello world');
});
这个插件可以用来防止对隐藏的内容或可视区域之外的不必要的请求。
链接地址: http://www.djcxy.com/p/2361.html