在开发中,需要对分页处理,通常的作法是,使用页码,即展示分页条,点击页码,跳到相应的页。
另一种作法是,通过滚动自动加载下一页。它分为,前端渲染分页数据和后端渲染分页数据。
前端渲染:指 ajax 请求数据后,由 JS 解析数据,并渲染到页面上。
后端渲染:指 ajax 请求的数据,即由后端(服务器)渲染后的数据,前端不需要再做处理。
Jquery Infinite Scroll 属于后端渲染,前端只负责展示,不作具体处理;它也支持对 json 数据处理,也就是说,由前端对数据处理后再渲染。
初始化时,path 可以使用3种方式定义:
内置分页
path: ‘?getList?page={{#}}’
使用隐藏元素
path: ‘.pagination__next’
页面中:
<a class="pagination__next" style="display: none;" href="?getList&page=1">下一页</a>
通过回调
path: function () {
return '/addons/kaoshi/user_plan/do_question?test=' + (this.loadCount+1);
}留意,返回的内容是 html 页面时,则,必须包含下一页链接。
<a class="pagination__next" style="display: none;" href="?getList&page=2">下一页</a>
示例
<ul id="data_list">
<li class="item_li"> 内容</li>
</ul>
<a style="display: none;" href="?getList&page=1" class="pagination__next">下一页</a>
<script>
$('#data_list').infiniteScroll({
// 定义页地址
path: '?getList&page={{#}}',
// 定义追加元素
append: '.item_li',
// 是否自动加载
prefill: true,
// 检查是否是最后一页
checkLastPage: '.pagination__next',
});
</script>后端返回时,除了列表内容:
<ul>
<li class="item_li">内容</li>
<li class="item_li">内容</li>
<li class="item_li">内容</li>
</ul>还需要返回下一页读取地址(每次返回,都将是新的下一页地址):
<a class="pagination__next" style="display: none;" href="?getList&page=2">下一页</a>
这样,在鼠标滚动(向下滑动时),会自动加载下一页。当没有数据时,不返回下一页的地址就可以了。
有时候,需要先销毁再初始化,使用下面的代码先行判断后再销毁。
if ($('#data_list').data('infiniteScroll')) {
$('#data_list').infiniteScroll('destroy');
}除了本文介绍的简单使用外,它还支持,ajax 数据处理、加载效果、加载按钮等等,参见官方配置说明。
留意 Infinite Scroll 有3 种许可形式:开源、商业和 OEM。