如何根据用户滚动加载网页内容

IT技术 javascript jquery
2021-01-26 23:00:29

如何在用户滚动网页时加载内容。如何实施?

6个回答

一般来说,你需要有这样的结构

....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'));
      });
 }

您可能需要保留一个 javascript 变量lastId,它可以存储最后显示的 id 并将其传递给 AJAX 接收器,以便它知道要返回哪些新内容。然后在你的 AJAX 中你可以调用

      $.post('getMoreContent.php', 'lastId=' + lastId, function(data) {
           //Assuming the returned data is pure HTML
           $(data).insertBefore($('#placeHolder'));
      });

我在我公司的搜索页面上就是这样做

正确的。如果整个内容已经在一个 div 中,您可以使用.append()或达到该效果。
2021-03-14 23:00:29
此外,您可能想要添加一个缓冲区,而不是到达确切的底部,您只需要到达底部的 200 像素以内。一些浏览器在滚动时变得有点奇怪,甚至我的鼠标也会跳来跳去。添加缓冲区可以缓解其中的一些怪癖。
2021-04-02 23:00:29
如果除了此解决方案之外,您还向哈希添加了一些信息,以便用户在点击链接或刷新后返回页面时具有“已保存状态”,该怎么办?当它们返回时,您可以使用哈希信息加载到先前滚动到的内容。然后他们不必滚动/等待,滚动/等待等......
2021-04-07 23:00:29
#placeholder必要不是需要根据DOM结构,但是这基本上是我如何做之前。
2021-04-10 23:00:29
@gourav 听起来您一般需要有关 AJAX 的帮助。你完全熟悉 AJAX 吗?如果没有,这里有很多帖子可以帮助您入门(stackoverflow.com/questions/tagged/ajax)。另请阅读:api.jquery.com/jQuery.ajaxen.wikipedia.org/wiki/Ajax_(programming)
2021-04-12 23:00:29

只是为了扩展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>

`

我想在滚动即将结束时获取数据,即使 300 对我也不起作用。它仅在我到达页面末尾时触发
2021-03-30 23:00:29
我发现这个答案中的想法确实改进了 Dutchie432 的好答案。
2021-04-03 23:00:29

您指的是动态渐进式加载。

是一个有据可查的概念,甚至还有来自不同库的一些内置支持。例如,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));
  }
});
最后!在数千个使用纯 js 的 jQuery 片段中,正是我正在寻找的。
2021-03-21 23:00:29

您可以使用 jscroll 一个 jquery 插件

http://jscroll.com/

Lazik 你应该提供带有代码的示例,而不仅仅是链接到其他站点。
2021-03-18 23:00:29
为什么投反对票?我用谷歌找到了这个页面,这就是我希望找到的。
2021-03-27 23:00:29