闲来无事撸个pagination

/**
 * 依赖jquery,bootstrap3
 */
(function($){
    var defaultConfigure = {
        total: 0,
        current: 1,
        pageSize:10,
        totalpage:1,
        shownumber:8,
        pageSizeOption:[10,20,30,40,50]
    }
    $.fn.extend({
        pagination: function(configure,onchange) {
            var $this = $(this),
            newConfigure = $.extend(true,{},defaultConfigure,configure),
            totalpage = newConfigure.total === 0 ? 1 : Math.ceil(newConfigure.total/newConfigure.pageSize),
            con = $('<div style="white-space:nowrap; height:32px; line-height: 32px"></div>'),
            psoCon = $('<div class="text-multe pull-left"></div>'),
            pso_total = $('<div style="display:inline-block;margin-right:15px"></div>'),
            pso_select = $('<select style="background-color: white;height:32px"></select>'),
            pnCon = $('<div class="text-right"></div>'),
            pn_pn = $('<ul class="pagination" style="margin:0;margin-right:5px"></ul>'),
            pn_sel = $('<div style="display:inline-block;" class="pull-right"></div>'),
            pn_sel_btn = $('<button style="display:inline-block;" class="btn btn-default btn-sm">跳转</button>'),
            pn_sel_in = $('<input style="width:40px;display:inline-block" class="form-control input-sm " type="text" placeholder="">');
            
            newConfigure.totalpage = totalpage;
            $this.configure = newConfigure;
            
            con.append(psoCon.append(pso_total).append(pso_select));
            con.append(pnCon.append(pn_pn).append(pn_sel.append(pn_sel_btn).append($('<span>&nbsp;至&nbsp;</span>')).append(pn_sel_in).append($('<span>&nbsp;页&nbsp;</span>'))));
            $this.append(con);

            pn_sel_btn.on('click',function(){
                $this.jumpto(parseInt(pn_sel_in.val()))
            });
            pso_select.on('change',function(e){
                var c = $this.configure;
                c.pageSize = parseInt(e.target.value);
                c.totalpage = Math.ceil(c.total / c.pageSize);
                $this.refresh();
                if(onchange){
                    onchange({
                        totalpage: c.totalpage,
                        current: c.current,
                        pageSize: c.pageSize
                    });
                }
            });

            $this.createDetail = function(){
                var c = $this.configure;
                pso_total.text('总共'+c.total+'条,'+(c.total === 0 ? 1 : Math.ceil(c.total/c.pageSize))+'页');
                for(var i in c.pageSizeOption){
                    pso_select.append($('<option value=\"'+c.pageSizeOption[i]+'\">'+c.pageSizeOption[i]+'条每页</option>'))
                };
            }
            $this.create_pn_pn_child = function(){
                var c = $this.configure;
                pn_pn.empty();

                var prew = $('<li><a href="#">&laquo;</a></li>');
                prew.on('click',$this.prew);
                pn_pn.append(prew);

                var totalpage = c.totalpage;
                if(totalpage > c.shownumber){
                    var start = c.current - Math.floor(c.shownumber/2);
                    start = (start + c.shownumber - 1) > totalpage ? totalpage - c.shownumber + 1 : start;
                    start = start <= 0 ? 1 : start;
                    for(var i=start;i<c.shownumber + start;i++){
                        var li = $('<li '+(c.current === i ? 'class=\"active\"' : '') +'><a href="#">'+i+'</a></li>');
                        li.on('click',{value:i},function(e){
                            $this.jumpto(e.data.value)
                        });
                        pn_pn.append(li);
                    }
                }
                else{
                    for(var i=1; i<=totalpage; i++){
                        var li = $('<li '+(c.current === i ? 'class=\"active\"' : '') +'><a href="#">'+i+'</a></li>');
                        li.on('click',{value:i},function(e){
                            $this.jumpto(e.data.value)
                        });
                        pn_pn.append(li);
                    }
                }
                var next = $('<li><a href="#">&raquo;</a></li>');
                next.on('click',function(){
                    $this.next();
                });
                pn_pn.append(next);
            }
            $this.createDetail();
            $this.create_pn_pn_child();
            
            //跳转至某页
            $this.prew = function(){
                if($this.configure.current === 1)return;
                $this.jumpto($this.configure.current-1)
            }
            $this.jumpto = function(number){
                if(number<1 || number>$this.configure.totalpage)throw new Error('您选择的野马超出范围!');
                $this.configure.current = number;
                $this.create_pn_pn_child();
                if(onchange){
                    onchange({
                        totalpage: $this.configure.totalpage,
                        current: $this.configure.current,
                        pageSize: $this.configure.pageSize
                    });
                }
            }
            $this.next = function(){
                var c = $this.configure;
                var totalpage = c.totalpage;
                if(c.current === totalpage)return;
                $this.jumpto(c.current+1)
            }
            $this.refresh = function(configure){
                var $nc = configure || {},
                newConfigure = $.extend(true,{},$this.configure,$nc),
                totalpage = newConfigure.total === 0 ? 1 : Math.ceil(newConfigure.total/newConfigure.pageSize);

                newConfigure.totalpage = totalpage;
                $this.configure = newConfigure;

                var c = $this.configure;
                c.current = c.current > c.totalpage ? c.totalpage : c.current;
                $this.jumpto(c.current)
            }
            return $this
        }
    });
})(jQuery)

使用方法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>

<head>
    <title>pagination</title>
    <link rel="stylesheet" type="text/css" href="/tools/bootstrap-3.3.7/css/bootstrap.min.css" />
</head>

<body>

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

推荐阅读更多精彩内容