<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// total: 表示页码总数
// size: 表示每页显示的数据条数
// page: 表示当前页码
// btnCount: 表示当前显示页码数
function fn(total,size,page,btnCount=5) {
// 允许的情况下让page处于正中间
// 先判断btnCount 的奇偶
const arr = []
if(btnCount % 2 !== 0) {
// btnCount是奇数
const num = ((btnCount - 1) / 2)
// res页码总数
const res = Math.ceil(total / size)
if(page<1) page = 1
if(page>res) page = res
// 页码允许在中间显示
if(num < page && page+num <= res) {
let number = page
for(let i=0;i<num;i++) {
number--
arr.unshift(number)
}
arr.push(page)
number = page
for(let i=0;i<num;i++) {
number++
arr.push(number)
}
// 页码只能在中间之前位置显示
}else if(page <= num) {
let sum = page - 1
let number = page
for(let i=0;i<sum;i++) {
number--
arr.unshift(number)
}
arr.push(page)
number = page
for(let i=0;i<btnCount-page;i++) {
number++
arr.push(number)
}
// 页码只能在中间靠后位置显示
}else if(res - page < num) {
let sum = res - page
let number = page
for(let i=0;i<btnCount-sum-1;i++) {
number--
arr.unshift(number)
}
arr.push(page)
number = page
for(let i=0;i<sum;i++) {
number++
arr.push(number)
}
}
}
return arr
}
const newArr = fn(100,10,6,5) // [1,2,3,4,5]
console.log(newArr)
</script>
</body>
</html>