分页插件

使用的是jquery.z-pager.js插件,底部有其完整代码,
前端一般只需获取后台的几个分页属性对应的值,并通过调用下面方法就可以触发:
(current:当前页码数,totalData:数据总条数)

/*分页*/
    var pageNo = "${page.pageNo}";
    var count = "${page.count}";
    $("#pager").zPager({
        current: pageNo,
        totalData: count
    });
   $("#pager a").click(function(){
        pageNo = $(this).attr("page-id");
        var add = "${pc}/front/activity/list?pageNo="+pageNo;
        $(this).attr('href', add);
    })

HTML:

<div style="text-align: center;margin:20px auto;">
       <div id="pager" class="pager clearfix"></div>
</div>

CSS(记得里面的url要填对对应的图标图片路径):

.fl {
    float: left;
}
.fr {
    float: right;
}
.pager {
    max-width: 800px;
    text-align: center;
    margin-bottom: 30px;
    display: inline-block;
}
.pager a{
    cursor: pointer;
}
.pager a,
.pager span {
    width: 29px;
    height: 28px;
    border: 1px #cccccc solid;
    margin-left: -1px;
    color: #8a8a8a;
    display: inline-block;
    line-height: 28px;
    float: left;
    font-size: 12px;
    text-decoration: none;
    margin: 0 2px;
}
.pager a:hover,
.pager span:hover {
    border-color: #3897cd;
    color: #3897cd;
    position: relative;
    z-index: 1;
}
.pager span.current {
    background-color: #3897cd;
    color: #fff;
    border-color: #3897cd;
    position: relative;
    z-index: 1;
}
.pager .pg-first,
.pager .pg-prev,
.pager .pg-next,
.pager .pg-last{
    background: url(../images/page_bg.jpg) 0 0 no-repeat;
}
.pager .pg-first:hover,
.pager .pg-prev:hover,
.pager .pg-next:hover,
.pager .pg-last:hover{
    background: url(../images/page_bg_hover.jpg) 0 0 no-repeat;
}
.pager .pg-prev,
.pager .pg-prev:hover{
    background-position: 0 -28px;
}
.pager .pg-next,
.pager .pg-next:hover{
    background-position: -29px -28px;
}
.pager .pg-last,
.pager .pg-last:hover{
    background-position: -29px 0;
}
.pager .pg-prev[disabled='true'],
.pager .pg-prev[disabled='true']:hover{
    cursor: default;
    background-image: url(../images/page_bg.jpg);
}
.pager .pg-next[disabled='true'],
.pager .pg-next[disabled='true']:hover{
    cursor: default;
    background-image: url(../images/page_bg.jpg);
}
.pager .pg-prev[disabled='true'],
.pager .pg-next[disabled='true']{
    border-color: #eeeeee;
}
.pager span.els{
    border-color: transparent;
}

.pagerHtmlWrap{
    width: 800px;
    margin: 30px auto;
}
.pagerHtmlWrap .cc_cells{
    width: 100%;
    height: 35px;
    padding: 5px 0;
    border-bottom: 1px #cccccc solid;
}
.pagerHtmlWrap .cc_cells a{
    color: #454545;
    font-size: 14px;
    line-height: 35px;
    text-decoration: none;
}
.pagerHtmlWrap .cc_cells a span{
    display: inline-block;
    width: 25%;
    text-align: left;
    margin: 0;
}

图片(默认图和hover图):


page_bg.jpg

page_bg_hover.jpg

这是jquery.z-pager.js插件的完整代码(底部可以更改默认的分页属性):

;(function($){
    var methods = {
        pageInit: function(options){
            /**
             * [opts this plug propertys]
             * @type {Obeject}
             */
            var opts = $.extend({},$.fn.zPager.defaults,options);
            return $(this).each(function(k,v){
                var _v = $(v);
                _v.data("options",opts);
                methods.pageData(_v, opts.current);
            })
        },
        pageData: function(_v, _current){
            /**
             * [opts this plug propertys]
             * @type {Obeject}
             */
            var opts = _v.data("options");
            var t = opts.totalData, p = opts.pageData, ajaxOpts = null;
            if(opts.ajaxSetData&&(typeof(opts.ajaxSetData)==='boolean')){
                if(opts.url!=='' && typeof(opts.url)==='string'){
                    ajaxOpts = methods.ajaxData(opts.url, _current);
                    t = opts.totalData = ajaxOpts.total;
                    if(ajaxOpts.rows.length>0){
                        var ishasDataRender = (opts.dataRender && typeof(opts.dataRender)==='function');
                            ishasDataRender ? opts.dataRender(ajaxOpts.rows) : methods.dataRender(_v, ajaxOpts.rows);
                    }
                }else{
                    $.pageError(2);
                }
            }
            if(t%p === 0){
                opts.pageCount = parseInt(t/p);
            }else{
                opts.pageCount = parseInt(t/p)+1;
            }
            if(opts.pageCount>0){
                _v.data("options",opts);
                methods.pageRender(_v, _current);
            }
        },
        dataRender: function(_v, _data){
            var opts = _v.data("options");
            var cells = '';
                for(var i=0;i<_data.length;i++){
                    cells += '<div class="cc_cells"><a href=""><span>'+_data[i].id+'-'+Math.random()+'</span>';
                    cells += '<span>'+_data[i].title+'</span>';
                    cells += '<span>'+_data[i].starttime+'</span>';
                    cells += '<span>'+_data[i].endtime+'</span>';
                    cells += '</a></div>';
                }
            if(opts.htmlBox===''||(typeof(opts.htmlBox)!=='Obeject')){
                var abx = _v.prev();
                if(!abx.hasClass('pagerHtmlWrap')){
                    var d = '<div class="pagerHtmlWrap"></div>';
                    _v.before(d);
                }
                _v.prev().html(cells);
            }else{
                opts.htmlBox.html(cells);
            }
        },
        pageRender: function(_v, _current){
            /**
             * [o this plug propertys]
             * @type {Obeject}
             */
            var o = _v.data("options");
            var _page = o.pageCount;

            var _middle = parseInt(o.pageStep/2);
            var _tep = _middle-2;
            var _html = '';
            if(_page>o.pageStep&&_current<=_page){
                _html += methods.setPrevNext(o, 'prev');
                if(_current<=_middle){
                    _html += methods.forEach(1, o.pageStep, _current, o.active);
                    _html += methods.elliPsis();
                }else if(_current>_middle&&_current<(_page-_tep)){
                    _html += methods.pageBtn(1);
                    _html += methods.elliPsis();
                    _html += methods.forEach(_current-_tep, _current-(-_tep)-(-1), _current, o.active);
                    _html += methods.elliPsis();
                }else if(_current>=(_page-_tep)){
                    _html += methods.pageBtn(1);
                    _html += methods.elliPsis();
                    _html += methods.forEach(_page-2*_tep-1, _page-(-1), _current, o.active);
                }
                _html += methods.setPrevNext(o, 'next');
            }else if(_page<=o.pageStep){
                if(_page>o.minPage){
                    _html += methods.setPrevNext(o, 'prev');
                }
                _html += methods.forEach(1, _page-(-1), _current, o.active);
                if(_page>o.minPage){
                    _html += methods.setPrevNext(o, 'next');
                }   
            }
            _v.html(_html);
            methods.bindEvent(_v);
        },
        bindEvent: function(_v){
            /**
             * [o this plug propertys]
             * @type {Obeject}
             */
            var o = _v.data("options");
            var _a = _v.find("a");
                $.each(_a,function(index,item){
                    var _this = $(this);
                    _this.on("click",function(){
                        if(_this.attr("disabled")){
                            return false;
                        }
                        var _p = _this.attr("page-id");
                        o.current = _p;
                        _v.data("options",o);
                        // methods.options.current = _p;
                        methods.pageData(_v, _p);
                    })
                })
        },
        forEach: function(_start,length,_current,curclass){
            /**
             * [s page elements]
             * @type {String}
             */
            var s = '';
            for(var i = _start;i<length;i++){
                if(i === parseInt(_current)){
                    s += methods.pageCurrent(i,curclass);
                }else{
                    s += methods.pageBtn(i);
                }
            }
            return s;
        },
        pageCurrent: function(_id,_class){
            /**
             * [class current page element calss]
             * @type {String}
             */
            return '<span class="'+_class+'" page-id="'+_id+'">'+_id+'</span>';
        },
        elliPsis: function(){
            /**
             * [class ellipses...]
             * @type {String}
             */
            return '<span class="els">...</span>';
        },
        pageBtn: function(_id){
            /**
             * [id page id]
             * @type {String}
             */
            return '<a page-id="'+_id+'">'+_id+'</a>';
        },
        addBtn: function(_property, _page, _count){
            /**
             * [disabled is it can click button]
             * @type {Boolean}
             */
            var disabled = '';
            if(_count){
                disabled = (_page === 0 || _page === _count-(-1)) ? 'disabled="true"':'';
            }
            return '<a class="'+_property+'" page-id="'+_page+'" '+disabled+'></a>';
        },
        setPrevNext: function(_o, _type){
            /**
             * [s string create prev or next buttons elements]
             * @type {String}
             */
            var s = '';
            function prev(){
                if(_o.btnShow){
                    s += methods.addBtn(_o.firstBtn, 1); 
                }
                if(_o.btnBool){
                    s += methods.addBtn(_o.prevBtn, _o.current-1, _o.pageCount);
                }
                return s;
            }
            function next(){
                if(_o.btnBool){
                    s += methods.addBtn(_o.nextBtn, _o.current-(-1), _o.pageCount);
                }
                if(_o.btnShow){
                    s += methods.addBtn(_o.lastBtn, _o.pageCount);
                }
                return s;
            }
            return _type==='prev'? prev(): next();
        },
        ajaxData: function(_url, _current){
            /**
             * [ajax get data and pagenumber]
             * @param  {Object} ){ var parms [ajax url,current page number]
             * @return {[type]}            [obj total rows]
             */
            var _total = $.fn.zPager.defaults.totalData;
            return (function(){
                var parms = {'total':_total,'rows':[]};
                $.ajax({
                    url: _url,
                    type: 'get',
                    data: {"page":_current},
                    dataType: 'json',
                    cache : false,  
                    async : false,
                    success: function(data) {
                        if(data.total && (data.total!==0)){
                            parms['total'] = data.total;
                            parms['rows'] = data.rows;
                        }else{
                            $.pageError(3);
                        }
                    },
                    error: function(XMLHttpRequest,textStatus,errorThrown) {
                        var msg = '';
                        switch(XMLHttpRequest.readyState){
                            case 0:
                                msg = '(未初始化)还没有调用send()方法';
                                break;
                            case 1:
                                msg = '(载入)已调用send()方法,正在发送请求';
                                break;
                            case 2:
                                msg = '(载入完成)send()方法执行完成,已经接收到全部响应内容';
                                break;
                            case 3:
                                msg = '(交互)正在解析响应内容';
                                break;
                            case 4:
                                msg = '(完成)响应内容解析完成,可以在客户端调用了';
                                break;
                        }
                        console.log(textStatus+':'+XMLHttpRequest.readyState+'-'+msg);
                    }
                })
                return parms;
            })();
        }
    }

    $.extend({
        pageError:function(type){
            /**
             * [switch error type]
             * @param  {[type]} type [no this function]
             * @return {[type]}      [ajax error]
             */
            switch(type){
                case 1:
                    console.log('method'+method+'dose not exist on jQuery.zPager');
                    break;
                case 2:
                    console.log('no ajax');
                    break;
                case 3:
                    console.log('no data');
                    break;
                default:
                    console.log('default error');
            }
        }
    })

    $.fn.extend({
        zPager:function(method){
            /**
             * [if has this method]
             * @param  {[type]} methods[method] [apply this method]
             * @return {[type]}                 [return property]
             */
            if(methods[method]){
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            }else if(typeof method === 'object' || !method){
                return methods.pageInit.apply(this, arguments);
            }else{
                $.pageError(1);
            }
        }
    })

    $.fn.zPager.defaults = {
        totalData: 10, //数据总条数
        pageData: 10, //每页数据条数
        pageCount: 0, //总页数
        current: 1, //当前页码数
        pageStep: 6, //当前可见最多页码个数
        minPage: 0, //最小页码数,页码小于此数值则不显示上下分页按钮
        active: 'current', //当前页码样式
        prevBtn: 'pg-prev', //上一页按钮
        nextBtn: 'pg-next', //下一页按钮
        btnBool: true, //是否显示上一页下一页
        firstBtn: 'pg-first', //第一页按钮
        lastBtn: 'pg-last', //最后一页按钮
        btnShow: true, //是否显示第一页和最后一页按钮
        disabled: true, //按钮失效样式
        ajaxSetData: true, //是否使用ajax获取数据 此属性为真时需要url和htmlBox不为空
        url: '', //ajax路由
        htmlBox: '' //ajax数据写入容器
    }

})(jQuery)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容