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);

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     /*width: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 }

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‘]+‘\n‘+‘年龄:‘+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‘]+‘\n‘+‘年龄:‘+item[pageIndex][‘age‘]);
24             }
25         })
26     });
27
28
29 });

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

时间: 2024-10-09 22:27:08

pagination实现分页功能的相关文章

Yii2.0实用功能技巧解密之——分页功能

Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成. yii\data: Pagination 主要功能是对分页中的参数进行设置,如当前页.每页大小.总页数,总记录数等. yii\widgets: LinkPager 主要是根据yii\data: Pagination类所提供的参数生成前台页面的分页html代码. 使用:先在action里面生成分页对象,然后在前台的LinkPager中

如何用angularjs制作一个完整的表格之二__表格分页功能

接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获取到不同的表格数据来动态生成的. <div class="pagination"> <ul style="float:right"> <li id="previous"><a href=""

分页功能

利用sui实现分页功能 先把相应的js和css引入,在把配置的方法写好,在页面的底部加上一个div   <div id = "div1"></div> 然后在页面上加入插件的相应API $('#div1').pagination({ pages: ${totalPage },//总页数 styleClass: ['pagination-large'], showCtrl: true, displayPage: 6, currentPage:${currentPa

Mybatis Generator实现分页功能

Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉

django分页功能,templatetags的应用

django 将不会将得到的html代码自动转化 from django.utils.html import format_html html =''' <a href='http://www.china.cn'>中国</a>''' format_html(html) django分页 分页功能基本操作 from django.core.import Paginator li=[11,12,13,22,24,25] p=Paginator(li,3) #将li传入,每页显示3条 p

gleez 下分页功能优化

当一个控制器里的方法只调用了一次分页功能,且在index的方法里,则无需进行以下优化,否则可以根据建议内容优化: 找到/modules/gleez/classes/gleez/pagination.php文件下的url方法:修改内容见红色字体 public function url($page = 1) { // Clean the page number $page = max(1, (int) $page); // gleez cms pagination $pager = '/p'. $p

AngularJS实现简单的分页功能

本篇文章由:http://xinpure.com/angularjs-simple-paging-functionality/ 初学 AngularJS, 尝试着写一些小功能 代码逻辑写得略粗糙,仅仅只是实现了简单的分页功能,使用 AngularJS 尝尝鲜. AngularJS Code (Users.js) var Users = angular.module('Users', []); Users.controller('UserList', function($scope, $http)

分页功能的实现——Jdbc &amp;&amp; JSP

@目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+BaseServlet + 分页+JSP+JSTL+EL+MVC模式 什么是分页? 如上所示,就是分页  ,不用多说了 子模块功能的问题分析 和 解决方案 @总功能分析  常规JDBC中,点击查询或输入条件查询,在页面中可显示查询出的所有记录,有多少记录就显示多少.在这种项目的基础上增加分页功能 . @分页

python2.0_day19_前端分页功能的实现

我们前面完成的客户纪录展示,只有4条,如果有上百条就不能在1页中全部展示了,那样是不人性化的.另外一次性取出来,数据量也比较大.假如现在有95条数据,我们想实现一个每页展示20条,那就分为5页.假如我们实现了,那么前端每一次请求就需要给后台提供参数了.这个参数就是告诉views里的视图函数我取第几页.需求分析: 95条,每页20条 第一次请求 返回20条,并且后端返回当前返回是第几页 ,所以第一次返回是1 点击下一页 1+1=2 ,把2传给后端,后端拿到后在把第二页的内容返回给前端,并且把当前返