1. <!DOCTYPE html>
    2. <html lang="zh-CN">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <script>
    11. // total: 表示页码总数
    12. // size: 表示每页显示的数据条数
    13. // page: 表示当前页码
    14. // btnCount: 表示当前显示页码数
    15. function fn(total,size,page,btnCount=5) {
    16. // 允许的情况下让page处于正中间
    17. // 先判断btnCount 的奇偶
    18. const arr = []
    19. if(btnCount % 2 !== 0) {
    20. // btnCount是奇数
    21. const num = ((btnCount - 1) / 2)
    22. // res页码总数
    23. const res = Math.ceil(total / size)
    24. if(page<1) page = 1
    25. if(page>res) page = res
    26. // 页码允许在中间显示
    27. if(num < page && page+num <= res) {
    28. let number = page
    29. for(let i=0;i<num;i++) {
    30. number--
    31. arr.unshift(number)
    32. }
    33. arr.push(page)
    34. number = page
    35. for(let i=0;i<num;i++) {
    36. number++
    37. arr.push(number)
    38. }
    39. // 页码只能在中间之前位置显示
    40. }else if(page <= num) {
    41. let sum = page - 1
    42. let number = page
    43. for(let i=0;i<sum;i++) {
    44. number--
    45. arr.unshift(number)
    46. }
    47. arr.push(page)
    48. number = page
    49. for(let i=0;i<btnCount-page;i++) {
    50. number++
    51. arr.push(number)
    52. }
    53. // 页码只能在中间靠后位置显示
    54. }else if(res - page < num) {
    55. let sum = res - page
    56. let number = page
    57. for(let i=0;i<btnCount-sum-1;i++) {
    58. number--
    59. arr.unshift(number)
    60. }
    61. arr.push(page)
    62. number = page
    63. for(let i=0;i<sum;i++) {
    64. number++
    65. arr.push(number)
    66. }
    67. }
    68. }
    69. return arr
    70. }
    71. const newArr = fn(100,10,6,5) // [1,2,3,4,5]
    72. console.log(newArr)
    73. </script>
    74. </body>
    75. </html>