javascript实现pagination分页组件

博客聚焦Web开发中的分页组件,要求完成pagination函数,在id为jsPagination的DOM元素中实现分页显示。明确了多种显示规则,如最多连续显示5页、total为0时隐藏元素等,同时规定total、current为正整数且1 <= current <= total。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页组件是web开发中常见的组件,请完成pagination函数,在id为jsPagination的DOM元素中完成分页的显示部分,需求如下
1、最多连续显示5页,居中高亮显示current页(如demo1所示)
2、total为0时,隐藏整个元素(如demo2所示)
3、如果total<=5,则显示全部页数,隐藏“首页”和“末页”元素(如demo3所示)
4、当current居中不足5页,向后(前)补足5页,隐藏“首页”(“末页”)元素(如demo4和demo5所示)
5、total、current均为正整数,1 <= current <= total

/*

  •  思路: 以current为轴点,用一个数组保存7个li对应的状态 -1,0皆为不显示 num>1显示对应的数字
  •  但是需要判判断是否是 第一个(首页) 最后一个(末页),这两个只有当对应num大于0才显示,否则隐藏
  •  首先 我们应该确定右边界 maxRight [...,current,...],a[current]为current节点的值
  •  total-current可以判断出右边还有多少大于2的话末页就可以显示否则右边界应该是 total-current+1
  •  考虑一种情况,当current是小于等于2的,那么current右边的数量是应该增加的
  •  if(current<=2 && maxRight+1<total){
  •         maxRight+=3-current;
  •  }
  •  情况考虑完毕,先从current向右走var i = 1 ; i <= maxRight ; i++;
  •  同理向左走一次走完那么至少是左边都是完整的,当然我们应该过滤掉empty,因为我们是从a[current]开始左右走的,  包括首页的控制变量
  •  但是右边是不一定的,因为total是可能小于7的,但我们可以确定的是剩下的一定是不能显示的,所以
  •  a = a.filter(function(a){
  •           return a>=-1;
  •         })
  •     //填充7个 while(a.length<7){
  •                a[a.length]=-1;
  •            }
  •    至此,遍历这个数组 我们就可以对应的去渲染了

*/

 var pag = document.getElementById("jsPagination"),
        pageLis = pag.children.pageNum;

        function pagination(total, current) {
            if(total==0 || current>total){
                hide(pag);
                return;
            }
            show(pag);
            var a = [],count=0;
            a[current] = current;
            maxRight = total-current>2?3:total-current+1;
            if(current<=2 && maxRight+1<total){
               maxRight+=3-current;
            }
            //向右走
            for(var i = 1 ; i <= maxRight ; i++){
                if(current+i<=total){
                   a[current+i] = current+i;
                }
                else{
                    a[current+i] = -1;
                }
            }
            //向左走
            for(var i = 1 ; i <= 5-maxRight+1 ; i++){
               if(current-i>=0){
                   a[current-i] = current-i; 
               }
            }
            //过滤empty
            a = a.filter(function(a){
               return a>=-1;
            })
            //填充7个
            while(a.length<7){
               a[a.length]=-1;
            }
            render({list:a,current:current});
        }
        // render(pagination(3,2));
        function render(data){
            var a = data.list,
                current = data.current,
                last = a.length-1;
            a.forEach(function(num,i){ //遍历一次数组,对dom操作
                    if(num>0){
                        if(i>0 && i!=0 && i!=6)
                            pageLis[i].innerHTML = num;
                        if(num==current){
                            activeLi(pageLis[i])
                        }else{
                             noActiveLi(pageLis[i])
                        }
                        show(pageLis[i]);
                    }
                    else{
                        hide(pageLis[i]);
                        noActiveLi(pageLis[i])
                    }
            })
        }
        function noActiveLi(el){
            el.classList.remove("current");
        }
        function activeLi(el){
            el.classList.add("current");
        }
        function hide(el){
            el.classList.add("hide");
        }
        function show(el){
            el.classList.remove("hide");
        }

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值