Layui流加载模块使用

在开发微信集合平台的时候,首页展示公众号文章的时候,由于文章太多,展示不完,于是想到了使用流加载,下面记录如何使用Layui框架实现流加载。

0x01 html代码

1
<span type="text" data-num="1" id="num" style="display: none"></span>
2
<div class="article" id="demo"></div>

span标签的作用是,由于默认页面展示最新的文章,如果用户点击媒体社区类下的文章,在向下滑动的时候,也会导致最新文章的接口也会被调用,导致资源被浪费,通过判断span标签的data-num值,在请求之前,先判断值,在进行接口调用,这样就不会导致资源浪费,以下值对应的含义

  • 1:最新文章(默认展示)
  • 2:某个公众号下的文章(如i春秋)
  • 3:分类下的文章(如社区媒体类)
  • 4:搜索内容

以下以某个公众号文章展示如何实现流加载

0x02 javascript 代码

1
$(function () {
2
   $.ajaxSetup({cache:false});
3
    $(".layui-colla-content a").click(function (event) {
4
        var a = $(this);
5
        var id = a.attr('img-data');
6
        var flag = $("#num");
7
        flag.attr('data-num', "2"); //初始化flag值为2
8
        $("#demo").empty();//将文章列表清空
9
        layui.use('flow', function () { //此部分为流加载
10
            var flow = layui.flow;
11
            flow.load({
12
                elem: '#demo' //指定列表容器
13
               ,scrollElem: '#demo' //滚动条所在元素选择器
14
                , isAuto: true //是否自动加载,如果设为false,点会在列表底部生成一个“加载更多”的button,则只能点击它才会加载下一页数据
15
                , mb: 1 //与底部的临界距离
16
                , done: function (page, next) { //到达临界点(默认滚动触发),触发下一页
17
                    layer.load();
18
                    var lis = [];
19
                    //以jQuery的Ajax请求为例,请求下一页数据(注意:page是从2开始返回)
20
                    if (flag.attr('data-num') == '2') { //在发送请求的时候,先判断下值,如果是这个值的话,才发送请求,防止下滑时,每个接口都请求
21
                        var url = '/articles/?page=' + page + '&id=' + id;
22
                        $.get(url, function (res) {
23
                            //假设你的列表返回在data集合中
24
                             layer.closeAll('loading');
25
                            layui.each(res.data, function (index, item) {
26
                                lis.push()  //此处将获取的data信息,展示到页面中,此处push函数里面为传入前端的html代码
27
                            });
28
                            //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
29
                            //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
30
                            next(lis.join(''), page < res.count);
31
                            url = '' //重新赋值,必须的,原文档没有,不重新赋值,好像有bug
32
                        });
33
                    }
34
                }
35
            });
36
            return false
37
        });
38
    })
39
});

0x03 后端

后端的话,就按照正常的分页写即可。