jQuery 在滚动时加载更多数据

IT技术 javascript jquery ajax scroll
2021-01-30 06:06:04

我只是想知道如何才能在 div.loading 可见时在滚动上实现更多数据。

通常我们会查找页面高度和滚动高度,看看是否需要加载更多数据。但下面的例子有点复杂。

下图是完美的例子。下拉框中有两个 .loading div。当用户滚动内容时,无论哪个可见,它都应该开始为其加载更多数据。

在此处输入图片说明

那么我如何才能知道 .loading div 是否对用户可见?所以我只能开始加载那个 div 的数据。

6个回答

在 jQuery 中,使用滚动功能检查是否已到达页面底部。一旦你点击它,进行一个 ajax 调用(你可以在此处显示加载图像直到 ajax 响应)并获取下一组数据,将其附加到 div。当您再次向下滚动页面时,将执行此函数。

$(window).scroll(function() {
    if($(window).scrollTop() == $(document).height() - $(window).height()) {
           // ajax call get data from server and append to the div
    }
});
如果有人想知道用户是否已经滚动到底部,他可以在此处显示的 if 中使用 if 条件: if($(window).scrollTop() + $(window).height() == $(document ).height()) { console.log('滚动到底部!'); }
2021-03-12 06:06:04
我以类似的方式处理这个问题,考虑到你总是在页面底部有任意内容(导航),并且你真的想在到达底部之前加载。所以我的内部功能是: var end = $("#BottomThing").offset().top; var viewEnd = $(window).scrollTop() + $(window).height(); var distance = end - viewEnd; if (distance < 300) // do load
2021-03-25 06:06:04
这个答案不是我在问题中提出的。
2021-03-26 06:06:04
这个解决方案很棒而且最简单;) 您可以在 ajax 调用中使用以下几行改进此代码:new_element.hide().appendTo('.your_div').fadeIn(); $(window).scrollTop($(window).scrollTop()-1);第一行以很好的方式附加元素,第二行确保您的函数永远不会在页面底部停止。
2021-03-30 06:06:04
Ryan Bates 有一个关于这个的精彩片段:railscasts.com/episodes/114-endless-page还有一个修订版,但您可能需要订阅。
2021-04-08 06:06:04

您听说过jQuery Waypoint 插件

以下是调用航点插件并在滚动到达底部后让页面加载更多内容的简单方法:

$(document).ready(function() {
    var $loading = $("<div class='loading'><p>Loading more items&hellip;</p></div>"),
    $footer = $('footer'),
    opts = {
        offset: '100%'
    };

    $footer.waypoint(function(event, direction) {
        $footer.waypoint('remove');
        $('body').append($loading);
        $.get($('.more a').attr('href'), function(data) {
            var $data = $(data);
            $('#container').append($data.find('.article'));
            $loading.detach();
            $('.more').replaceWith($data.find('.more'));
            $footer.waypoint(opts);
        });
    }, opts);
});
你可以参考我对 Lazy Loader 实现的回答。stackoverflow.com/a/45846766/2702249
2021-03-15 06:06:04
好的建议,但最糟糕的 js 插件航点……浪费了我很多时间……下面的答案要快得多
2021-03-23 06:06:04
你认为下面哪个答案是最好的?
2021-04-03 06:06:04
有机会通过 jsfiddle 进行演示吗?
2021-04-10 06:06:04

下面是一个例子:

  1. 滚动到底部时,会附加 html 元素。这种附加机制只做了两次,最后附加了一个粉蓝色的按钮。

<!DOCTYPE html>
<html>
<head>
    <title>Demo: Lazy Loader</title>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <style>
        #myScroll {
            border: 1px solid #999;
        }

        p {
            border: 1px solid #ccc;
            padding: 50px;
            text-align: center;
        }

        .loading {
            color: red;
        }
        .dynamic {
            background-color:#ccc;
            color:#000;
        }
    </style>
    <script>
		var counter=0;
        $(window).scroll(function () {
            if ($(window).scrollTop() == $(document).height() - $(window).height() && counter < 2) {
                appendData();
            }
        });
        function appendData() {
            var html = '';
            for (i = 0; i < 10; i++) {
                html += '<p class="dynamic">Dynamic Data :  This is test data.<br />Next line.</p>';
            }
            $('#myScroll').append(html);
			counter++;
			
			if(counter==2)
			$('#myScroll').append('<button id="uniqueButton" style="margin-left: 50%; background-color: powderblue;">Click</button><br /><br />');
        }
    </script>
</head>
<body>
    <div id="myScroll">
        <p>
            Contents will load here!!!.<br />
        </p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
        <p >This is test data.<br />Next line.</p>
    </div>
</body>
</html>

@Om Prakash Sao 它在这里工作正常,但是当我在 sublime 中运行此代码时,当滚动条到达顶部而不是底部时,该事件起作用,\
2021-03-26 06:06:04
@RohanAshik:我刚刚检查过。它正在工作。尝试向下滚动到最后。
2021-03-27 06:06:04

如果不是所有文档都滚动,例如,当您在文档中滚动时div,那么上述解决方案在没有调整的情况下将无法工作。下面是如何检查 div 的滚动条是否已经触底:

$('#someScrollingDiv').on('scroll', function() {
    let div = $(this).get(0);
    if(div.scrollTop + div.clientHeight >= div.scrollHeight) {
        // do the lazy loading here
    }
});
多谢兄弟!这真的帮助了我:)
2021-03-19 06:06:04
到目前为止的最佳答案,谢谢你是一个救星
2021-04-05 06:06:04

当窗口放大到大于 100% 的值时,此问题的公认答案与 chrome 存在一些问题。这是 chrome 开发人员推荐的代码,作为我在同一个问题上提出的错误的一部分。

$(window).scroll(function() {
  if($(window).scrollTop() + $(window).height() >= $(document).height()){
     //Your code here
  }
});

以供参考:

相关问题

铬错误

我喜欢这个答案,因为它有一个很好的平滑滚动和暂停。我使用的其他一些方法往往会加载内容过快,这在尝试真正关注内容而不是加载速度时会造成尴尬的体验。
2021-04-01 06:06:04