• pagination实现分页功能


    pagination.js:

    /**
     * pagination分页插件
     */
    ;(function($,window,document,undefined){
    
        //配置参数
        var defaults = {
            totalData:0,            //数据总条数
            showData:0,                //每页显示的条数
            pageCount:9,            //总页数,默认为9
            current:1,                //当前第几页
            prevCls:'prev',            //上一页class
            nextCls:'next',            //下一页class
            prevContent:'<',        //上一页内容
            nextContent:'>',        //下一页内容
            activeCls:'active',        //当前页选中状态
            coping:false,            //首页和尾页
            homePage:'',            //首页节点内容
            endPage:'',                //尾页节点内容
            count:3,                //当前页前后分页个数
            jump:false,                //跳转到指定页数
            jumpIptCls:'jump-ipt',    //文本框内容
            jumpBtnCls:'jump-btn',    //跳转按钮
            jumpBtn:'跳转',            //跳转按钮文本
            callback:function(){}    //回调
        };
    
        var Pagination = function(element,options){
            //全局变量
            var opts = options,//配置
                current,//当前页
                $document = $(document),
                $obj = $(element);//容器
    
            /**
             * 设置总页数
             * @param int page 页码
             * @return opts.pageCount 总页数配置
             */
            this.setTotalPage = function(page){
                return opts.pageCount = page;
            };
    
            /**
             * 获取总页数
             * @return int p 总页数
             */
            this.getTotalPage = function(){
                var p = opts.totalData || opts.showData ? Math.ceil(parseInt(opts.totalData) / opts.showData) : opts.pageCount;
                return p;
            };
    
            //获取当前页
            this.getCurrent = function(){
                return current;
            };
    
            /**
             * 填充数据
             * @param int index 页码
             */
            this.filling = function(index){
                var html = '';
                current = index || opts.current;//当前页码
                var pageCount = this.getTotalPage();
                if(current > 1){//上一页
                    html += '<a href="javascript:;" class="'+opts.prevCls+'">'+opts.prevContent+'</a>';
                }else{
                    $obj.find('.'+opts.prevCls) && $obj.find('.'+opts.prevCls).remove();
                }
                if(current >= opts.count * 2 && current != 1 && pageCount != opts.count){
                    var home = opts.coping && opts.homePage ? opts.homePage : '1';
                    html += opts.coping ? '<a href="javascript:;" data-page="1">'+home+'</a><span>...</span>' : '';
                }
                var start = current - opts.count,
                    end = current + opts.count;
                ((start > 1 && current < opts.count) || current == 1) && end++;
                (current > pageCount - opts.count && current >= pageCount) && start++;
                for (;start <= end; start++) {
                    if(start <= pageCount && start >= 1){
                        if(start != current){
                            html += '<a href="javascript:;" data-page="'+start+'">'+ start +'</a>';
                        }else{
                            html += '<span class="'+opts.activeCls+'">'+ start +'</span>';
                        }
                    }
                }
                if(current + opts.count < pageCount && current >= 1 && pageCount > opts.count){
                    var end = opts.coping && opts.endPage ? opts.endPage : pageCount;
                    html += opts.coping ? '<span>...</span><a href="javascript:;" data-page="'+pageCount+'">'+end+'</a>' : '';
                }
                if(current < pageCount){//下一页
                    html += '<a href="javascript:;" class="'+opts.nextCls+'">'+opts.nextContent+'</a>'
                }else{
                    $obj.find('.'+opts.nextCls) && $obj.find('.'+opts.nextCls).remove();
                }
    
                html += opts.jump ? '<input type="text" class="'+opts.jumpIptCls+'"><a href="javascript:;" class="'+opts.jumpBtnCls+'">'+opts.jumpBtn+'</a>' : '';
    
                $obj.empty().html(html);
            };
    
            //绑定事件
            this.eventBind = function(){
                var self = this;
                var pageCount = this.getTotalPage();//总页数
                $obj.off().on('click','a',function(){
                    if($(this).hasClass(opts.nextCls)){
                        var index = parseInt($obj.find('.'+opts.activeCls).text()) + 1;
                    }else if($(this).hasClass(opts.prevCls)){
                        var index = parseInt($obj.find('.'+opts.activeCls).text()) - 1;
                    }else if($(this).hasClass(opts.jumpBtnCls)){
                        if($obj.find('.'+opts.jumpIptCls).val() !== ''){
                            var index = parseInt($obj.find('.'+opts.jumpIptCls).val());
                        }else{
                            return;
                        }
                    }else{
                        var index = parseInt($(this).data('page'));
                    }
                    self.filling(index);
                    typeof opts.callback === 'function' && opts.callback(self);
                });
                //输入跳转的页码
                $obj.on('input propertychange','.'+opts.jumpIptCls,function(){
                    var $this = $(this);
                    var val = $this.val();
                    var reg = /[^d]/g;
                    if (reg.test(val)) {
                        $this.val(val.replace(reg, ''));
                    }
                    (parseInt(val) > pageCount) && $this.val(pageCount);
                    if(parseInt(val) === 0){//最小值为1
                        $this.val(1);
                    }
                });
                //回车跳转指定页码
                $document.keydown(function(e){
                    var self = this;
                    if(e.keyCode == 13 && $obj.find('.'+opts.jumpIptCls).val()){
                        var index = parseInt($obj.find('.'+opts.jumpIptCls).val());
                        self.filling(index);
                        typeof opts.callback === 'function' && opts.callback(self);
                    }
                });
            };
    
            //初始化
            this.init = function(){
                this.filling(opts.current);
                this.eventBind();
            };
            this.init();
        };
    
        $.fn.pagination = function(parameter,callback){
            if(typeof parameter == 'function'){//重载
                callback = parameter;
                parameter = {};
            }else{
                parameter = parameter || {};
                callback = callback || function(){};
            }
            var options = $.extend({},defaults,parameter);
            return this.each(function(){
                var pagination = new Pagination(this, options);
                callback(pagination);
            });
        };
    
    })(jQuery,window,document);
    View Code

    index.html:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <link rel="stylesheet" href="css/pagination.css">
     7     <script src="../../base/jquery.js"></script>
     8     <script src="js/jquery.pagination.js"></script>
     9 </head>
    10 <body>
    11 <div class="box">
    12 
    13 </div>
    14 <div class="M-box"></div>
    15 <script src="main.js"></script>
    16 </body>
    17 </html>

    pagination.css

     1 @charset "UTF-8";
     2 
     3 /*.wrapper{*/
     4     /*margin:0 auto;*/
     5     /*960px;*/
     6     /*height:100%;*/
     7 /*}*/
     8 .M-box{
     9     position: relative;
    10     text-align: center;
    11       zoom: 1;
    12 }
    13 .M-box:before,.M-box:after{
    14     content:"";
    15     display:table;
    16 }
    17 .M-box:after{
    18     clear:both;
    19     overflow:hidden;
    20 }
    21 .M-box span{
    22     float: left;
    23     margin:0 5px;
    24     width: 38px;
    25     height: 38px;
    26     line-height: 38px;
    27     color: #bdbdbd;
    28     font-size: 14px;
    29 }
    30 .M-box .active{
    31     float: left;
    32     margin:0 5px;
    33     width: 38px;
    34     height: 38px;
    35     line-height: 38px;
    36     background: #e91e63;
    37     color: #fff;
    38     font-size: 14px;
    39     border: 1px solid #e91e63;
    40 }
    41 .M-box a{
    42     float: left;
    43     margin:0 5px;
    44     width: 38px;
    45     height: 38px;
    46     line-height: 38px;
    47     background: #fff;
    48     border: 1px solid #ebebeb;
    49     color: #bdbdbd;
    50     font-size: 14px;
    51 }
    52 .M-box a:hover{
    53     color:#fff;
    54     background: #e91e63;
    55 }
    56 .M-box .next,.M-box .prev{
    57     font-family: "Simsun";
    58     font-size: 16px;
    59     font-weight: bold;
    60 }
    61 .now,.count{
    62     padding:0 5px;
    63     color:#f00;
    64 }
    65 
    66 input{
    67     float: left;
    68     margin:0 5px;
    69     width: 38px;
    70     height: 38px;
    71     line-height: 38px;
    72     text-align: center;
    73     background: #fff;
    74     border: 1px solid #ebebeb;
    75     outline: none;
    76     color: #bdbdbd;
    77     font-size: 14px;
    78 }

    package.json:

     1 {
     2   "items": [
     3     {
     4       "name": "a",
     5       "age": 12
     6     },
     7     {
     8       "name": "b",
     9       "age": 13
    10     },
    11     {
    12       "name": "c",
    13       "age": 11
    14     },
    15     {
    16       "name": "d",
    17       "age": 12
    18     },
    19     {
    20       "name": "e",
    21       "age": 12
    22     }
    23   ]
    24 }
    View Code

    main.js

     1 /**
     2  * Created by mengfanxu on 17/2/3.
     3  */
     4 $(function () {
     5 
     6     var showBox = $('.box');
     7 
     8     $.getJSON('data/package.json', function (data) {
     9         console.log(data.items.length);
    10         var item = data.items,length = data.items.length, pageIndex ;
    11         //默认页面显示内容
    12         showBox.html('姓名:'+item[0]['name']+'
    '+'年龄:'+item[0]['age']);
    13         $(".M-box").pagination({
    14             pageCount: length,
    15             jump: true,
    16             coping: true,
    17             homePage: '首页',
    18             endPage: '末页',
    19             preContent: '上页',
    20             nextContent: '下页',
    21             callback: function (index) {
    22                 pageIndex = index.getCurrent()-1;
    23                 showBox.html('姓名:'+item[pageIndex]['name']+'
    '+'年龄:'+item[pageIndex]['age']);
    24             }
    25         })
    26     });
    27 
    28 
    29 });

    喝水不忘造井之恩,插件作者:Mss: http://www.jq22.com/jquery-info5697 

  • 相关阅读:
    三种按键处理函数
    enum与typedef enum的用法
    PIC18F中断定时器
    .net core Ocelot+Consul实现网关及服务注册和服务发现
    wpf的优点
    ASP.NET Core Web API下事件驱动型架构的实现
    2020个人计划
    图解C#的值类型,引用类型,栈,堆,ref,out
    .NET Core中的一个接口多种实现的依赖注入与动态选择
    redis分布式锁深度剖析
  • 原文地址:https://www.cnblogs.com/chenluomenggongzi/p/6362705.html
Copyright © 2020-2023  润新知