创建分页组件需要的 按钮数组 (动态按钮顺序)

要求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>
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值