滚动到最后一里时检测
Detect when scrolled to last li
我需要检查用户是否已滚动到我页面上列表项的末尾 <li>
。当发生这种情况时,我想执行 AJAX 调用。
如何知道用户是否滚动到最后一个列表项。
这是我迄今为止尝试过的方法。
if ($('li:last').is(':visible')) {
alert('Scrolled to last li');
}
但是,不幸的是它不起作用。
您无法检查元素是否 visible
,因为即使元素不在视口中,它仍然可见。
来自 jQuery 文档:
Elements are considered visible if they consume space in the document. Visible elements have a width or height that is greater than zero.
稍微调整了我的另一个。
$(document).ready(function() {
// Get window height, and the bottom of the viewport
var windowHeight = $(window).height(),
gridTop = windowHeight * .1,
gridBottom = windowHeight + $('ul li:last').height();
// On each scroll event on window
$(window).on('scroll', function() {
// Interested element caching
var $lastElement = $('ul li:last');
// Get elemets top
var thisTop = $lastElement.offset().top - $(window).scrollTop();
// Check if the element is in the current viewport
if (thisTop > gridTop && (thisTop + $lastElement.height()) < gridBottom) {
$('#message').text('Yay! In sight');
$lastElement.addClass('middleviewport');
} else {
$('#message').text('Still not available');
$lastElement.removeClass('middleviewport');
}
});
});
#message {
position: fixed;
top: 0;
text-align: center;
z-index: 2;
background: yellow;
padding: 10px;
width: 100%;
color: red;
}
ul {
margin: auto;
}
ul li {
width: 300px;
height: 10px;
background: #f5f5f5;
float: left;
margin: 10px;
}
ul li.middleviewport {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div id="message">Still not available</div>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
您可以使用这样的函数:
function isElementVisible(elem)
{
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
并处理滚动事件:
$(document).ready(function(){
$(window).scroll(function(){
var e = $('#yourContiner ul li:last');
if (isElementVisible(e)) {
alert('visible');
}
})
})
我需要检查用户是否已滚动到我页面上列表项的末尾 <li>
。当发生这种情况时,我想执行 AJAX 调用。
如何知道用户是否滚动到最后一个列表项。
这是我迄今为止尝试过的方法。
if ($('li:last').is(':visible')) {
alert('Scrolled to last li');
}
但是,不幸的是它不起作用。
您无法检查元素是否 visible
,因为即使元素不在视口中,它仍然可见。
来自 jQuery 文档:
Elements are considered visible if they consume space in the document. Visible elements have a width or height that is greater than zero.
稍微调整了我的另一个
$(document).ready(function() {
// Get window height, and the bottom of the viewport
var windowHeight = $(window).height(),
gridTop = windowHeight * .1,
gridBottom = windowHeight + $('ul li:last').height();
// On each scroll event on window
$(window).on('scroll', function() {
// Interested element caching
var $lastElement = $('ul li:last');
// Get elemets top
var thisTop = $lastElement.offset().top - $(window).scrollTop();
// Check if the element is in the current viewport
if (thisTop > gridTop && (thisTop + $lastElement.height()) < gridBottom) {
$('#message').text('Yay! In sight');
$lastElement.addClass('middleviewport');
} else {
$('#message').text('Still not available');
$lastElement.removeClass('middleviewport');
}
});
});
#message {
position: fixed;
top: 0;
text-align: center;
z-index: 2;
background: yellow;
padding: 10px;
width: 100%;
color: red;
}
ul {
margin: auto;
}
ul li {
width: 300px;
height: 10px;
background: #f5f5f5;
float: left;
margin: 10px;
}
ul li.middleviewport {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div id="message">Still not available</div>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
您可以使用这样的函数:
function isElementVisible(elem)
{
var $elem = $(elem);
var $window = $(window);
var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + $window.height();
var elemTop = $elem.offset().top;
var elemBottom = elemTop + $elem.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
并处理滚动事件:
$(document).ready(function(){
$(window).scroll(function(){
var e = $('#yourContiner ul li:last');
if (isElementVisible(e)) {
alert('visible');
}
})
})