JS原生分页按钮居中显示

24 篇文章 0 订阅
6 篇文章 0 订阅

基本要求

// 创建分页组件需要的 按钮数组
// btnCount: 最多能看到几个按钮
// total: 总条数
// size: 每页几条
// page: 当前第几页
function f(total, size, page,btnCount=5) {
  // show me your code
  const arr = [] // 能看到的页码集合
  
  return arr
}
// 在可能的情况下,让page处于正中间
f(100, 10, 1,  5)  // ==> [1, 2, 3, 4, 5]
f(100, 10, 7,  5)  // ==> [5, 6, 7, 8, 9]
f(100, 10, 2,  5)  // ==> [1, 2, 3, 4, 5]
f(100, 10, 5,  5)  // ==> [3, 4, 5, 6, 7]

效果实现

// total总条数
// size每页第几条
// page当前第几页
// btnCount 当前第几页
// 要得到的效果    [1,2,3,4,5]

function f(total, size, page, btnCount = 5) {
  // 创建一个数组
  let newArr = []
  console.log(total, size, page)
  // 总条数/第几条 = 有几页   限制用户输入的值只能在规定范围之内
  if (page > total / size) {
    return `请输规范的参数page:${page},最大页数为${total / size}`
  }
  // 如果他输入的值 刚好等于最大页数无法居中怎么办?
  if (page + 1 >= total / size || page + Math.floor(btnCount / 2) > size) {
    // console.log(123)
    let newpage = total / size - btnCount
    for (let i = 0; i < btnCount; i++) {
      newpage++
      newArr.push(newpage)
    }
    return newArr
  }
  //如果他输入的值 刚好等于最小页数无法居中怎么办?照常从头输出
  else if (page - 1 <= 1 || page - Math.floor(btnCount / 2) < 1) {
    for (let i = 0; i < btnCount; i++) {
      newArr.push(i + 1)
    }
    return newArr
  }
  // 执行到最后一步他就可以照常按照逻辑开始编辑了
  // 因为在之前已经把异常操作已经拦截
  // 页码他必须是一个奇数
  if (btnCount % 2 == 1) {
    // 向下取整

    let b = page - Math.floor(btnCount / 2)
    for (let i = 0; i < btnCount; i++) {
      newArr.push(b++)
    }
    return newArr
  } else {
    return 'btnCount请输入奇数'
  }
}


let a = f(100, 10, 5, 7)
console.log(a)

改良版

function f(total, size, page, btnCount = 5) {
  // 创建一个数组
  let newArr = []
  let TotalPages = total / size // 总页数
  let deviant = Math.floor(btnCount / 2) //左右要展示几条数据

  console.log(total, size, page)

  // 总条数/第几条 = 有几页   限制用户输入的值只能在规定范围之内
  if (page > TotalPages) {
    return `请输规范的参数page:${page},最大页数为${total / size}`
  }


    // 页码他必须是一个奇数
  if (btnCount % 2 == 1) {
    // 向下取整

    let b = page - deviant
    for (let i = 0; i < btnCount; i++) {
      newArr.push(b++)
    }
    return newArr
  } else {
    return 'btnCount请输入奇数'
  }


  // 如果他输入的值 刚好等于最大页数无法居中怎么办?
  if (page + 1 >= TotalPages || page + deviant > size) {
    // console.log(123)
    let newpage = TotalPages - btnCount
    for (let i = 0; i < btnCount; i++) {
      newpage++
      newArr.push(newpage)
    }
    return newArr
  }
  //如果他输入的值 刚好等于最小页数无法居中怎么办?照常从头输出
  else if (page - 1 <= 1 || page - deviant < 1) {
    for (let i = 0; i < btnCount; i++) {
      newArr.push(i + 1)
    }
    return newArr
  }
}
let a = f(100, 10, 6, 5)
console.log(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值