假设我有 div,我想获取数据并将数据推送到该 div。当用户在 div 内滚动时,将获取下一组数据并将其推送到 div 中。如何使用 jQuery 检测滚动条位置?我不想使用任何插件。我需要 jQuery 代码。这是示例链接,例如 http://www.stevefenton.co.uk/cmsfiles/assets/File/infinitescroller.html,但它使用了插件。
4 回答
类似的东西怎么样:
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() == $(document).height()) {
var new_div = '<div class="new_block"></div>';
$('.main_content').append(new_div.load('/path/to/script.php'));
}
});
当滚动条到达页面底部时,这将在主页面容器中添加一个新元素。它还使用从外部脚本加载的内容填充这个新元素。
如果要检测用户是否已将特定 div 滚动到底部:
$('.some_element').bind('scroll', function(){
if($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight){
var new_div = '<div class="new_block"></div>';
$('.main_content').append(new_div.load('/path/to/script.php'));
}
});
此代码已经过测试和验证可以正常工作。当您滚动 div 时,代码通过比较滚动条高度与滚动条位置来检查滚动条是否到达底部。如果是这样,它会调用一个获取更多内容并将其附加到 div 的方法。
享受!
科比
$(document).ready(function () {
$("div").scroll(function () {
var $this = $(this);
var height = this.scrollHeight - $this.height(); // Get the height of the div
var scroll = $this.scrollTop(); // Get the vertical scroll position
var isScrolledToEnd = (scroll >= height);
$(".scroll-pos").text(scroll);
$(".scroll-height").text(height);
if (isScrolledToEnd) {
var additionalContent = GetMoreContent(); // Get the additional content
$this.append(additionalContent); // Append the additional content
}
});
});
根据您的评论,这里是工作的整个 HTML 页面源代码(在 IE 9 下测试):
** 请确保您引用的是 jquery 库 **
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test Image</title>
<script src="assets/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("div").scroll(function () {
var $this = $(this);
var height = this.scrollHeight - $this.height(); // Get the height of the div
var scroll = $this.scrollTop(); // Get the vertical scroll position
var isScrolledToEnd = (scroll >= height);
$(".scroll-pos").text(scroll);
$(".scroll-height").text(height);
if (isScrolledToEnd) {
var additionalContent = GetMoreContent(); // Get the additional content
$this.append(additionalContent); // Append the additional content
}
});
});
function GetMoreContent() {
return "<p>This is the div content</p><p>This is the div content</p><p>This is the div content</p><p>This is the div content</p><p>This is the div content</p>";
}
</script>
</head>
<body>
<div style="overflow: scroll;height: 150px; border: 1px solid red;">
<p>This is the div content</p>
<p>This is the div content</p>
<p>This is the div content</p>
<p>This is the div content</p>
<p>This is the div content</p>
<p>This is the div content</p>
</div>
Scroll Height: <span class="scroll-height"></span> <br/>
Scroll position: <span class="scroll-pos"></span>
</body>
</html>
我认为.scrollTop()
是你选择的武器。jQuery API
获取匹配元素集中第一个元素的滚动条的当前垂直位置。
因此,请确保将其绑定到正确的元素。我猜直接在 div 上应该可以工作。
垂直滚动位置与在可滚动区域上方的视图中隐藏的像素数相同。如果滚动条位于最顶部,或者元素不可滚动,则此数字将为 0。
所以可能你必须找到一种方法来计算 div 的高度,就好像它会在没有滚动条的情况下被拉伸,以便将这些数字与加载事件的拍摄建立有意义的关系。
为了实现这种行为,您不需要 jquery 或 jquery 插件,您只需Vanilla Javascript
使用IntersectionObserver API
.
您需要做的就是放置元素并在它们出现在屏幕上时进行监听。
您可以使用一些 javascript 和 html 行来完成此操作,它比在浏览器中侦听滚动事件的性能要高得多
我最近在这里整理了一篇关于无限滚动和这种特定行为的文章
我希望它可以为您提供指导,以满足您的特定需求