要求1:100条数据 每页显示10条 当前 1/2/3 页 显示5个页码 显示如下
要求2:100条数据 每页显示10条 当前 4-7 页 显示5个页码 显示如下
要求2:100条数据 每页显示10条 当前 4-7 页 显示5个页码 显示如下
实现代码:
<script>
// 总条数 每页/条 多少页 显示页码数
function fn(tatal, size, page, btnCount=5){
const arr = [] //能看到的页码集合
// 算出页码前面放几个 前提要求要有 页 选中的不是最前几页与最后几页
const qian = page - Math.floor(btnCount / 2)
// 算出页码前面放几个 前提要求要有 btnCount 页 选中的不是最前几页与最后几页
const hou = page - Math.ceil(btnCount / 2)
if ( tatal/size <= btnCount ){ // 判断1 :总页码 小不小于 最多显示分页数 小于就进入
// 循环需求:显示最前面的 btnCount个 页数
for(let i=1 ;i <= tatal/size ;i++) {
// 插入 1 到 当前的总页数
arr.push(i)
}
} else if( page +hou >= Math.floor(tatal/size) ){ // 判断2:当前页的位置 如果是最后几个 进入 比如 一共10页 当前在第 9 页 显示 5 个页数
// 循环需求:需要 显示最后btnCount个 页数
for(let i=0;i<btnCount;i++){
// 前置添加 最大页数 减 i
arr.unshift(Math.floor(tatal/size-i))
}
} else if( page <= Math.floor(btnCount / 2) ){ // 判断 3:当前页的位置 如果在最前面几个 进入 比如 一共10页 当前在第 1 页 显示 5个页数
// 循环需求:一次显示前面 btnCount 个页码数
for(let i = 1;i <= btnCount; i++ ){
// 后置添加 依次插入i
arr.push(i)
}
} else if( page > tatal/size){ // 判断4:当前页的位置 如果大于总页数 进入
// 循环需求:直接依次插入最后 btnCount 个页码数
for(let i=0 ; i < btnCount ; i++){
// 前置依次通过总页数 - i 插入
arr.unshift(Math.floor(tatal/size-i))
}
} else { // 判断5 :前面不满足 进入
// 循环需求: 把当前页放在最最中间
for(let i=0 ;i < btnCount ;i++){
// 后置从 btnCount 第一个依次插入
arr.push(qian+i)
}
}
// 注意判断3必须写在判断一下面 当总页码不少于显示页数的时候在进行此判断
return arr
}
console.log(fn( 100 , 100 , 11 , 7)); // [1]
console.log(fn( 100 , 9 , 1 , 5)); // [ 1, 2, 3, 4, 5]
console.log(fn( 100 , 5 , 4 , 5)); // [2, 3, 4, 5, 6]
console.log(fn( 100 , 9 , 20 , 5)); // [7, 8, 9, 10, 11]
console.log(fn( 100 , 2 , 11 , 5)); // [9, 10, 11, 12, 13]
console.log(fn( 100 , 9 , 12 , 5)); // [7, 8, 9, 10, 11]
</script>