分页常见于前端多数据页面,现有的分页插件不可胜数,我分享一种构建分页显示的方法,目标是将当前也放在带显示数组的中间,如(以10页为例):
< 1 2 3 4 >
< 2 3 4 5 >
< 7 8 9 10 >
废话不多说,直接上代码:
// 参数:当前页码,页码显示数,页码总数
function getPage(current, showCnt, pageCnt) {
var array = []
for (var i = 0; i < pageCnt; i++) {
array.push(i + 1)
}
if (pageCnt <= showCnt) {
return array.splice(0, pageCnt)
} else if (pageCnt - current < showCnt - 1) {
// 避免这种现象(12, 4, 15)
return array.splice(pageCnt - showCnt, showCnt)
} else if (current - Math.ceil(showCnt / 2) >= 0) {
return array.splice(current - Math.ceil(showCnt / 2), showCnt)
} else {
return array.splice(0, showCnt)
}
}
页码要想正常显示就得考虑以下四种情况:
1.页码显示数小于页码总数。这种情况不管当前是第几页都要显示全部的页码,如(以3页,显示4个):< 1 2 3 >、< 1 2 3 > 、< 1 2 3 >
2.页码显示数大于页码总数,末尾的部分。这种情况不管当前是第几页都要显示最后n个页码(以10页,显示4个为例):< 6 7 8 9 >、< 7 8 9 10 >、< 7 8 9 10 >、< 7 8 9 10 >。对于这种情况需要特别说明:< 6 7 8 9 >这是不属于该情况的范畴,否则就该显示为< 7 8 9 10 >,这显然不是我们希望的结果。
3.页码显示数大于页码总数,而且是最中间的部分。这种情况是最常见的情况,应该保证当前页码在所有显示页码的正中间(以10页,显示4个为例):< 2 3 4 5 >、< 3 4 5 6 >、< 4 5 6 7 >、< 5 6 7 8 >、< 6 7 8 9 >。
4.页码显示数大于页码总数,最前面的部分。这种情况不管当前是第几页都要显示最前面的n个页码(以10页,显示4个为例):< 1 2 3 4 >、< 1 2 3 4 >。