Infinite Scroll 或 waypoint 实现滚动分页

阅读 (2262)
手机端 Infinite Scroll 实现无限分页时,前题必需已有有分页链接才能实现,改用 waypoint 可以实现翻到屏幕底部就发起请求加加数据,但前提是你设置到页码

Infinite Scroll 实现无限分页时,前题必需已有有分页链接才能实现,那么当我们的前后端数据分离时,前端代码实现分页时,也是在请求列表数据后,才能获取到分页数据,再渲染分页,那这种情况 Infinite Scroll 实现时就会有一个先后顺序的问题。有的同学可能就无法下手了。

(2018-05-31 貌似最新版的 Infinite Scroll 也有自定义分页数据请求方法,但没细看)

这里提一下另一个方法实现,waypoint插件,主要用于判断屏幕滚动到哪里的插件,我们可以用此插件判断屏幕滚动到底部时,用来触发新分页数据的请求,从而实现无限加载新数据的功能。

每滚动到底部一次,就给#page页码输入框加1,如果最后一次数据返回为空的,给 #isEnd 输入框标记为1

滚动到页面底部时,先判断#isEnd是否已标记为1,不是1再请求下一页数据即可

html:

<body>
<div class="wrapper" id="app">
  <input type="hidden" name="page" id="page" value="1">
  <input type="hidden" name="isEnd" id="isEnd" value="0">
  <div class="container pt-10 pb-10">
    <div id="list">
    </div>
  </div>
</div>

<footer>
  <div id="more" class="text-center ">正在加载</div>
</footer>
</body>

javascript:

$(function() {
    $footer = $('footer'),
        opts = {
            offset: '100%'
        };

    var setData = function() {
        var pageSize = 10;
        var page = $('#page').val();
        // 这里请求新分页的数据
        $.ajax({
            url: 'http://www.requesturl.com/?page=' + page + '&pageSize=' + pageSize,
            type: 'GET',
            dataType: 'json',
            success: function(response) {
                // 数据结构请按你自己的代码逻辑进行更改
                var res = response.list;

                if (res.length > 0) {
                    var html = '';
                    $.each(res, function(index, item) {
                        html += item.content;
                    });
                    // 往list里添加数据
                    $('#list').append(html);

                    // 设置下一页分页码
                    $('#page').val(parseInt(parseInt($('#page').val()) + 1));
                } else {
                    // 没有数据就进行标记,下次再滚动到底部就不再发起请求了
                    $('#isEnd').val(1);
                    $('#more').html('已经到底了');
                }

                $footer.waypoint(opts);
            }
        });
    }



    $('#page').val(1);
    setData();


    $footer.waypoint(function(event, direction) {
        $footer.waypoint('remove');

        // 先判断是否已经加载完了,当然,如果数据一直在动态增加,可以把这个判断去掉,也就是每次滚动到底部都加载数据,但对应的分页设置也要更改,这里不作讨论,自行解决
        if ($('#isEnd').val() != 1) {
            setData();
        }
    }, opts);
});

waypoint 版本用的以前的某个版本,我看了下官网最新版,使用方式已经不太一样了

这里放出我用的版本:waypoints, 以防版本不对造成上面的代码失效

 

就酱………

更新于:2018-05-31 13:55:46
返回顶部