在开发微信集合平台的时候,首页展示公众号文章的时候,由于文章太多,展示不完,于是想到了使用流加载,下面记录如何使用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 后端
后端的话,就按照正常的分页写即可。