分页组件源码分享

第一次写文章,把最近写的分页组件源码分享出来,一起学习交流

效果图

代码结构

render源码

    render: function(obj){
            obj.pagesize = obj.pagesize || 20;
            /*显示分页器的容器元素id*/
            this._wrapid = '#'+obj.wrapid;
            this._total = obj.total;
            this._pagesize = obj.pagesize;
            this._currentPage = obj.currentPage;
            /*页码改变的回调函数*/
            this._cb = obj.onPagechange;
            /*快速跳转值*/
            this.quickNum = '1';
            /*设置页码超过多少个时,显示省略号*/
            if(obj.btnCount<5){
                obj.btnCount = 5;
            }else if(obj.btnCount%2==0){
                //非奇数
                obj.btnCount = obj.btnCount+1;
            }
            this._btnsValue = obj.btnCount?obj.btnCount:7;
            /*页码过多,左右都存在省略号时,当前点击页码左右两边的页码个数*/
            this._halfbtns = parseInt((this._btnsValue-3)/2);
            /*显示的总页面数*/
            this._btnNum = obj.total/obj.pagesize>parseInt(obj.total/obj.pagesize)?parseInt(obj.total/obj.pagesize)+1:parseInt(obj.total/obj.pagesize);   
        }

复制代码

bindEvent源码

    bindEvent: function(){
            var that = this;
            /*页码点击*/
            $(that._wrapid).on('click','.pagenum',function(){
                that._currentPage = parseInt($(this).text());
                that._cb(that._currentPage);
                isshowMore.call(that);
            });

            /*上一页*/
            $(that._wrapid).on('click','#pagination-prev',function(){
                if($(this).hasClass('pagination-disabled')){
                    return;
                }
                that._currentPage--;
                $('#pagination-next').hasClass('pagination-disabled')&&$('#pagination-next').removeClass('pagination-disabled');
                if(that._currentPage==1){
                    $('#pagination-prev').addClass('pagination-disabled');
                }else{
                    $('#pagination-prev').removeClass('pagination-disabled');
                }
                that._cb(that._currentPage);
                isshowMore.call(that);
            });

            /*下一页*/
            $(that._wrapid).on('click','#pagination-next',function(){

                if($(this).hasClass('pagination-disabled')){
                    return;
                }
                that._currentPage++;
                $('#pagination-prev').hasClass('pagination-disabled')&&$('#pagination-prev').removeClass('pagination-disabled');
                if(that._currentPage==that._btnNum){
                    $('#pagination-next').addClass('pagination-disabled');
                }else{
                    $('#pagination-next').removeClass('pagination-disabled')
                }
                that._cb(that._currentPage);
                isshowMore.call(that);
            });
            /*快速跳转*/
            $(that._wrapid).on('keyup','#quickNum',function(event){
                var e = event || window.event;
                if(e.keyCode=='13'){
                    that._currentPage = e.target.value;
                    var regnum = /^[1-9]+$/
                    if(regnum.test(e.target.value+'')){
                        if(e.target.value>0&&e.target.value<=that._btnNum){
                            that.quickNum = e.target.value;
                            that._cb(that._currentPage);
                            isshowMore.call(that);
                        }else{
                            $(this).val('');
                        }
                    }else{
                        $(this).val('');
                    }
                }
            })
            $(that._wrapid).on('input','#quickNum',function(e){
                $(this).val(e.target.value)
            })

            if(that._btnNum>1){   // 超过1页,显示分页组件
                isshowMore.call(this);
            }
            /*判断省略符位置*/
            function isshowMore(){
                if(this._btnNum<=this._btnsValue){
                    // console.log('不显示');
                    creatBtns.call(this,'none')
                }else{
                    if(this._currentPage<=(this._btnsValue-1-this._halfbtns)){
                        //只显示后省略
                        creatBtns.call(this,'after');
                    }else if(this._currentPage>=this._btnNum-1-this._halfbtns){
                        //只显示前省略
                        creatBtns.call(this,'before')
                    }else{
                        //前后省略都显示
                        creatBtns.call(this,'all')
                    }
                }
            }

            /*创建页码按钮标签*/
            function creatBtns(ismorePosition){
                var html = '';
                var ismore = '<li class="pagination-ellipsis">...</li>';
                var firstbtn = '<li class="pagenum pagination-btn" data-num="1">1</li>';
                var lastbtn = '<li class="pagenum pagination-btn" data-num='+this._btnNum+'>'+this._btnNum+'</li>';
                var prevbtn = '<span class="pagination-btn" id="pagination-prev"><</span>';
                var nextbtn = '<span class="pagination-btn" id="pagination-next">></span>'
                if(this._currentPage == 1){
                    firstbtn = '<li class="pagenum pagination-btn pagination-current" data-num="1">1</li>';
                    prevbtn = '<span class="pagination-btn pagination-disabled" id="pagination-prev"><</span>'
                }
                if(this._currentPage == this._btnNum){
                    lastbtn = '<li class="pagenum pagination-btn pagination-current" data-num='+this._btnNum+'>'+this._btnNum+'</li>';
                    nextbtn = '<span class="pagination-btn pagination-disabled" id="pagination-next">></span>'
                }
                
                if(ismorePosition == 'none'){
                    for(var i = 1; i <= this._btnNum; i++){
                        if(i == this._currentPage){
                            html+= '<li class="pagenum pagination-btn pagination-current" data-num='+i+'>'+i+'</li>';
                        }else{
                            html += '<li class="pagenum pagination-btn" data-num='+i+'>'+i+'</li>';
                        }
                    }
                }
                if(ismorePosition=="after"){
                    // console.log('省略在后面');
                    for(var i = 1; i <= this._btnsValue-1; i++){
                        if(i == this._currentPage){
                            html += '<li class="pagenum pagination-btn pagination-current" data-num='+i+'>'+i+'</li>';
                        }else{
                            html += '<li class="pagenum pagination-btn" data-num='+i+'>'+i+'</li>';
                        }
                    }
                    html = html + ismore + lastbtn;
                }
                
                if(ismorePosition=="before"){
                    // console.log('省略在前面');
                    html = html + firstbtn + ismore;
                    for(var i=this._btnNum-(this._btnsValue-2);i<=this._btnNum;i++){
                        if(i == this._currentPage){
                            html+='<li class="pagenum pagination-btn pagination-current" data-num='+i+'>'+i+'</li>';
                        }else{
                            html+='<li class="pagenum pagination-btn" data-num='+i+'>'+i+'</li>';
                        }
                    }
                }
                
                if(ismorePosition=="all"){
                    // console.log('省略前后都有');
                    var halfnum = parseInt((this._btnsValue-3)/2);
                    html += firstbtn + ismore;
                    for(var i = (this._currentPage-halfnum);i<=this._currentPage+halfnum;i++){
                        if(i == this._currentPage){
                            html += '<li class="pagenum pagination-btn pagination-current" data-num='+i+'>'+i+'</li>'
                        }else{
                            html += '<li class="pagenum pagination-btn" data-num='+i+'>'+i+'</li>'
                        }
                    }
                    html+=ismore+lastbtn;
                }
                //快速跳转页码功能
                var quickJump = '<span class="quicktxt">&nbsp;跳至&nbsp;</span><input id="quickNum" value="'+ that.quickNum + '"/><span class="quicktxt">&nbsp;页</span>'
                $(this._wrapid).html(prevbtn+'<ul class="pagination-wrap">'+html+'</ul>' + nextbtn + quickJump);
            }
        }
复制代码

页面引用

当配置参数发生改变,如total再次调用pagination.init(obj)即可。

css

ul,li{
    margin: 0;
    padding:0;
}
.pagination-btn{
    padding: 6px 10px;
    margin-right: 4px;
    border-radius: 4px;
    border: 1px solid #ccc;/*no*/
    cursor: pointer;
    color: #999;
    display: inline-block;
}
.pagination-wrap{
    position: relative;
    display: inline-block;
}
.pagination-ellipsis{
    color: #999;
    position: relative;
    top: -5px;
    display: inline-block;
    padding: 0 12px;
    margin-right: 4px;
}
.pagination-current{
    border:1px solid #3E8DDD;/*no*/
    color:#3E8DDD;
}
.pagination-disabled{
    cursor: not-allowed;
}
#pagination-next,#pagination-prev{
    padding-right:8px;
    padding-left:8px;
}
#quickNum{
    width: 50px;
    padding: 8px 6px;
    outline: none;
    border-radius: 4px;
    border: 1px solid #ccc;/*no*/
    display:inline-block;
    color:#999;
}
.quicktxt{
    color:#999;
}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值