【发布时间】:2021-08-21 00:18:41
【问题描述】:
如何在用户滚动网页时加载内容。如何实现?
【问题讨论】:
标签: javascript jquery
如何在用户滚动网页时加载内容。如何实现?
【问题讨论】:
标签: javascript jquery
一般来说,你需要有这样的结构
....first page of content...
....first page of content...
....first page of content...
....first page of content...
....first page of content...
....first page of content...
....first page of content...
<div id="placeHolder"></div>
然后,您需要检测何时接近页面末尾,并获取更多数据
$(window).scroll(function(){
if ($(window).scrollTop() == $(document).height() - $(window).height()){
AddMoreContent();
}
});
function AddMoreContent(){
$.post('getMoreContent.php', function(data) {
//Assuming the returned data is pure HTML
$(data).insertBefore($('#placeHolder'));
});
}
您可能需要保留一个名为 lastId 之类的 javascript 变量,它存储最后显示的 id 并将其传递给 AJAX 接收器,以便它知道要返回哪些新内容。然后在你的 AJAX 中你可以调用
$.post('getMoreContent.php', 'lastId=' + lastId, function(data) {
//Assuming the returned data is pure HTML
$(data).insertBefore($('#placeHolder'));
});
我在 my company's search page 上正是这样做的。
【讨论】:
#placeholder 不一定是必需的,具体取决于 DOM 结构,但这基本上是我之前的做法。
.append() 或其他类似的东西。
只是为了扩展 Dutchie432。根据我的经验
if ($(window).scrollTop() == $(document).height() - $(window).height())
可能并非始终如一(我个人无法做到这一点,因为它是跳跃数字)。
此外,如果用户上下滚动,它可能会触发许多请求,而我们正在等待第一个 ajax 调用返回。
所以我做了什么来使它工作,是使用 >= 而不是 == 。 然后,在发出我的 ajax 请求之前解除对 scrollTop 的绑定。 如果ajax返回了任何数据(这意味着可能还有更多),则再次绑定它。
这里是
<script type="text/javascript">
$(document).ready(function(){
$(window).bind('scroll',fetchMore);
});
fetchMore = function (){
if ( $(window).scrollTop() >= $(document).height()-$(window).height()-300 ){
$(window).unbind('scroll',fetchMore);
$.post('ajax/ajax_manager.php',{'action':'moreReviews','start':$('.review').length,'step':5 },
function(data) {
if(data.length>10){
$(data).insertBefore($('#moreHolder'));
$(window).bind('scroll',fetchMore);
}
});
}
}
</script>
`
【讨论】:
您指的是动态渐进式加载。
这是一个有据可查的概念,甚至有一些来自不同库的内置支持。例如,JQuery 实际上有一个支持渐进式加载的 GridView。
您将需要利用 AJAX 来实现此功能。
【讨论】:
您可以使用 window.addeventlistener 来跟踪网页的滚动行为,并在用户位于网页脚下时向页面加载更多内容。
document.documentElement.scrollTop、document.documentElement.clientHeight 和 document.documentElement.scrollHeight 将帮助您实现这一目标。
例如:
window.addEventListener('scroll',()=>{
const {scrollTop,clientHeight,scrollHeight} = document.documentElement;
if ((scrollTop+clientHeight)>=scrollHeight) {
getContent((current_page+1));
}
});
【讨论】:
你可以使用 jscroll 一个 jquery 插件
【讨论】:
你可以使用jQuery之类的库来检索内容,然后将其附加到页面内容中,或者你可以使用一些jquery插件,例如:http://gbin1.com/technology/jquerynews/20111017jquerypluginwaypoints/infinite-scroll/
【讨论】: