<!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>