JS分页条

做分页条遇到的问题主要是中间几个页码如何计算.

目前做的这个分页功能:前进,后退,首,末,中间显示指定个数页码按钮,可选择转到指定页面,可选择几种尺寸和颜色

大体思路:

定义分页类

// getdataE:请求数据方法, pageindex:当前页码,pagesize:分页数大小 ,listcount: 总条数
// ,pagelistcount:取回数据条数,[PageBtnCount]:分页条上显示页码个数(1 - 10)
// ,[uisize]: 尺寸大小 , [uicolor]:颜色

function pageNumber(getdataE, pageindex, pagesize, listcount, pagelistcount, pagebtncount, uisize, uicolor)

{

}

// 主要方法: 生成分页栏UI.返回分页栏DOM对象
pageNumber.prototype.create = function ()

{

}

调用这个方法,得到分页栏的HTML,然后添加到容器中就行了.

关于中间几个页码的计算问题:

pagebtncount=8 // 假如需要显示8个按钮 那么可能是这样

pagebtncount=7 // 假如需要显示7个按钮 那么可能是这样

问题在于在当前页码位于正中时,要如何计算开始和结束页码.(如果是奇数,则当前页码正好位于正中,如果是偶数,则假定位于中间靠左的位置)

// 根据图可知,开始和结束页码值可由如下公式计算.例如:

// 要显示7个页码,当前页为4,要放在中间,则前面有3个(1,2,3),后面有3个(5,6,7).若当前页码为5.则前三个(2,3,4)后三个(6,7,8)

    var startIndex = pageIndex - parseInt(pagebtncount / 2)+ (pagebtncount % 2 == 0 ? 1 : 0);
    var endIndex = pageIndex + parseInt(pagebtncount/ 2);

// 这种算法并不适用所有情况,例如:

// 当前页码为2时,用以上公式计算的话,则前三个为(-1,0,1)后三个为(3,4,5).显然1以下的页码不对. 这是页码小于1的情况

// 若当前页码为9,则前三个(6,7,8)后三个(10,11,12).显然总共才10页,10以上的页码也是不对的. 这是页码大于最大页码的情况

// 如果计算出这两种错误的页码,需要调整如下:

// 1.页码小于1情况:

  将开始页码startIndex=1,再重新计算结束页码:endIndex=pagebtncount (结束页码等于要显示的页码按钮数).这里应注意,如果endIndex超出了总页数,则endIndex=总页数

// 2.超过最大页码情况

  将结束页码endIndex=pagecount,再重新计算开始页码:startIndex=endIndex-pagebtncount+1(开始页码等于结束页码减掉要显示的按钮数加1 ).同上,如果得出startIndex小于1,则startIndex=1

到此,可以正确的计算出中间的页码值了.然后循环生成标签即可.

完整代码:

  1 // 分页控制类1.0
  2 // getdataE:请求数据方法, pageindex:当前页码,pagesize:分页数大小 ,listcount: 总条数
  3 // ,pagelistcount:取回数据条数,[PageBtnCount]:分页条上显示页码个数(1 - 10)
  4 // ,[uisize]: 尺寸大小 , [uicolor]:颜色
  5 function pageNumber(getdataE, pageindex, pagesize, listcount
  6     , pagelistcount, pagebtncount, uisize, uicolor)
  7 {
  8     // 请求数据方法,必传
  9     this.getData = typeof getdataE == ‘function‘ ? getdataE : null;
 10     // 表示当前页码>1
 11     this.PageIndex = (pageindex && pageindex > 0) ? pageindex : 1;
 12     // 每页显示记录数[2-50]
 13     this.PageSize = (pagesize && pagesize > 1 && pagesize < 51) ? pagesize : 10;
 14     // 表示记录总数
 15     this.ListCount = (listcount && listcount >= 0) ? listcount : 0;
 16     // 当前页记录个数,=取回数据集个数
 17     this.PageListCount;
 18
 19     // 显示几个页码按钮[1-10]
 20     this.PageBtnCount =parseInt((pagebtncount && pagebtncount > 0 && pagebtncount < 11) ? pagebtncount : 7);
 21     // 分页条尺寸
 22     this.UISize = uisize || null;
 23     // 分页条颜色
 24     this.UIColor = uicolor || null;
 25 }
 26 // 表示前一页码(应由当前页码计算得出)
 27 pageNumber.prototype.PrevPage = function ()
 28 {
 29     return this.PageIndex <= 1 ? 1 : this.PageIndex - 1;
 30 }
 31 // 表示后一页码
 32 pageNumber.prototype.NextPage = function ()
 33 {
 34     return this.IsEndPage ? this.PageIndex : this.PageIndex + 1;
 35 }
 36 // 总页数(由数量总数和分页大小算出)
 37 pageNumber.prototype.PageCount = function ()
 38 {
 39     if (this.ListCount >= 0 && this.PageSize >= 1 && this.PageIndex >= 1)
 40     {
 41         var pagecount = parseInt(this.ListCount / this.PageSize);
 42         var pagecountM = this.ListCount % this.PageSize;
 43         return pagecountM > 0 ? pagecount + 1 : pagecount;
 44     }
 45     return 0;
 46 }
 47 // 表示是否已经到最后一页(由pagesize,pageindex和总数量算出,如果未设定这三值,则返回false)
 48 pageNumber.prototype.isEndPage = function ()
 49 {
 50     if (this.ListCount >= 0 && this.PageSize >= 1 && this.PageIndex >= 1)
 51     {
 52         return this.PageIndex * this.PageSize >= this.ListCount;
 53     }
 54     return false;
 55 }
 56 // 生成分页栏UI.返回分页栏DOM对象
 57 pageNumber.prototype.create = function ()
 58 {
 59     var _self = this;
 60     // 外层
 61     var box = $(String.Format(‘<div class="pagenumberbox {0} {1}"></div>‘, this.UISize || ‘‘, this.UIColor||‘‘));
 62
 63     // 显示 首页,上一页
 64     if (this.PageIndex <= 1)
 65     {
 66         box.append(‘<a class="pagebtn first disabled" title="首页"></a><a class="pagebtn prev disabled" title="上页"></a>‘);
 67     }
 68     else
 69     {
 70         var firstpage = $(‘<a class="pagebtn first" title="首页"></a>‘).click(
 71             function ()
 72             {
 73                 _self.getData(1, this);
 74             });
 75         box.append(firstpage);
 76         var prevpage = $(‘<a class="pagebtn prev" title="上页"></a>‘).click(
 77             function ()
 78             {
 79                 _self.getData(_self.PrevPage(), this);
 80             });
 81         box.append(prevpage);
 82     }
 83
 84     // 显示 当前页码,以及按PageBtnCount设定前后页码个数.中间页码按钮,关键在于确认起止页码
 85     var pagecount = this.PageCount();
 86     // 如果分页数为偶数,则当前页码不能在正中.例如当前页为4,要显示6个页码则是: 2 3 (4:当前页码在此) 5 6 7
 87     var startIndex = this.PageIndex - parseInt(this.PageBtnCount / 2)
 88         + (this.PageBtnCount % 2 == 0 ? 1 : 0);
 89     var endIndex = this.PageIndex + parseInt(this.PageBtnCount / 2);
 90     // 起始页小于1,说明当前页码位于正中时,前面页码数不够了.应将1页为起始页码,而结束页码也应该重新计算
 91     if (startIndex < 1)
 92     {
 93         startIndex = 1;
 94         // 根据要显示的页码数计算结束页码,如果算出页码数大于总页码,则以总页码数为结束页码
 95         endIndex = this.PageBtnCount;
 96         if (endIndex > pagecount)
 97             endIndex = pagecount;
 98     }
 99     // 结束页码大于总页码,说明当前页码位于正中时,后面的页码数不够.应将总页码数为终止页码,起始页码应重新计算
100     if (endIndex > pagecount)
101     {
102         endIndex = pagecount;
103         // 根据要显示的页码数计算起始页码,如果算出小于1,则以1为起始页码
104         startIndex = endIndex - this.PageBtnCount + 1;
105         if (startIndex < 1)
106             startIndex = 1;
107     }
108     //
109     for (var i = startIndex; i <= endIndex; i++)
110     {
111         var pagenum = i;
112         var pagebtn = $(String.Format(‘<a class="{0}" val="{1}">{1}</a>‘
113             , pagenum == this.PageIndex ? ‘current pagebtn‘ : ‘pagebtn‘, pagenum));
114         pagebtn.click(function ()
115         {
116             _self.getData($(this).attr(‘val‘), this);
117         });
118         box.append(pagebtn);
119     }
120
121     // 显示 下一页,末页
122     if (this.isEndPage())
123     {
124         box.append(‘<a class="pagebtn next disabled" title="下页"></a><a class="pagebtn last disabled" title="末页"></a>‘);
125     }
126     else
127     {
128         var nextpage = $(‘<a class="pagebtn next" title="下页"></a>‘).click(
129             function ()
130             {
131                 _self.getData(_self.NextPage(), this);
132             });
133         box.append(nextpage);
134         var lastpage = $(‘<a class="pagebtn last" title="末页"></a>‘).click(
135             function ()
136             {
137                 _self.getData(_self.PageCount(), this);
138             });
139         box.append(lastpage);
140     }
141     // 显示 总记录数/总页数
142     var total_part = ‘<span class="pagelabel">共{1}页 / {0}条数据 </span>‘;
143     total_part = String.Format(total_part, this.ListCount, this.PageCount());
144     box.append(total_part);
145
146     // 显示 页码选择框
147     box.append(‘<span class="pagelabel">&nbsp;&nbsp;转到</span>‘);
148     var pageselect = $(‘<select class="pagenumselect"></select>‘);
149     var option = ‘‘;
150     for (var pagenum = 1; pagenum <= this.PageCount(); pagenum++)
151     {
152         if (pagenum == this.PageIndex)
153         {
154             option += String.Format(‘<option value="{0}" selected="selected">{0}</option>‘, pagenum);
155         }
156         else
157         {
158             option+=String.Format(‘<option value="{0}">{0}</option>‘, pagenum);
159         }
160     }
161     pageselect.append(option);
162     pageselect.change(function ()
163     {
164         _self.getData(this.value);
165     });
166     box.append(pageselect);
167     box.append(‘<span class="pagelabel">页</span>‘);
168     return box[0];
169 }

分页控制类pageNumber

样式:

  1 /*外层*/
  2 .pagenumberbox {
  3     text-align: center;
  4     font-size: 0;
  5     padding: 5px 0;
  6     /**/
  7     -moz-user-select: none;
  8     -ms-user-select: none;
  9     -webkit-user-select: none;
 10     user-select: none;
 11 }
 12     /*页码按钮*/
 13     .pagenumberbox .pagebtn {
 14         display: inline-block;
 15         text-decoration: none;
 16         border-radius: 4px;
 17         border: 1px solid #ddd;
 18         color: #2a64fc;
 19         cursor: pointer;
 20         margin: auto 5px;
 21     }
 22     /*文字*/
 23     .pagenumberbox .pagelabel {
 24         color: #333;
 25     }
 26     /*按钮禁用*/
 27     .pagenumberbox .pagebtn.disabled {
 28         cursor: not-allowed;
 29         filter: alpha(opacity=65);
 30         -webkit-box-shadow: none;
 31         box-shadow: none;
 32         opacity: .75;
 33         color: #ddd;
 34     }
 35
 36     .pagenumberbox .pagebtn:not(.disabled):hover, .pagenumberbox .pagenumselect:hover {
 37         background-color:#eee;
 38     }
 39
 40     /*页码选择框*/
 41     .pagenumberbox .pagenumselect {
 42         display: inline-block;
 43         border: 1px solid #ddd;
 44         border-radius: 4px;
 45         width: auto;
 46         color: #333;
 47         margin: 0 5px;
 48     }
 49     /*特定按钮 首页 尾页 上页 下页 当前页*/
 50     .pagenumberbox .first:before {
 51         content: "首页";
 52     }
 53
 54     .pagenumberbox .last:before {
 55         content: "末页";
 56     }
 57
 58     .pagenumberbox .prev:before {
 59         content: "上一页";
 60     }
 61
 62     .pagenumberbox .next:before {
 63         content: "下一页";
 64     }
 65     /*当前页*/
 66     .pagenumberbox .current.pagebtn {
 67         cursor: default;
 68         color: #292929;
 69         font-weight: 600;
 70         background-color: #eee;
 71     }
 72
 73     /*大小 四种,f14 f16 f18 f20默认f12 font-size:12*/
 74     .pagenumberbox .pagebtn {
 75         padding: 3px 5px;
 76         width: 36px;
 77     }
 78
 79     .pagenumberbox .pagebtn,
 80     .pagenumberbox .pagelabel,
 81     .pagenumberbox .pagenumselect {
 82         font-size: 12px;
 83         vertical-align: middle;
 84     }
 85
 86     .pagenumberbox.f14 .pagebtn {
 87         padding: 5px 7px;
 88         width: 42px;
 89     }
 90
 91     .pagenumberbox.f14 .pagenumselect {
 92         padding: 2px 4px;
 93     }
 94
 95     .pagenumberbox.f14 .pagebtn,
 96     .pagenumberbox.f14 .pagelabel,
 97     .pagenumberbox.f14 .pagenumselect {
 98         font-size: 14px;
 99     }
100
101     .pagenumberbox.f16 .pagebtn {
102         padding: 7px 9px;
103         width: 48px;
104     }
105
106     .pagenumberbox.f16 .pagenumselect {
107         padding: 4px 6px;
108     }
109
110     .pagenumberbox.f16 .pagebtn,
111     .pagenumberbox.f16 .pagelabel,
112     .pagenumberbox.f16 .pagenumselect {
113         font-size: 16px;
114     }
115
116     .pagenumberbox.f18 .pagebtn {
117         padding: 9px 11px;
118         width: 54px;
119     }
120
121     .pagenumberbox.f18 .pagenumselect {
122         padding: 6px 8px;
123     }
124
125     .pagenumberbox.f18 .pagebtn,
126     .pagenumberbox.f18 .pagelabel,
127     .pagenumberbox.f18 .pagenumselect {
128         font-size: 18px;
129     }
130
131     .pagenumberbox.f20 .pagebtn {
132         padding: 11px 13px;
133         width: 60px;
134     }
135
136     .pagenumberbox.f20 .pagenumselect {
137         padding: 8px 10px;
138     }
139
140     .pagenumberbox.f20 .pagebtn,
141     .pagenumberbox.f20 .pagelabel,
142     .pagenumberbox.f20 .pagenumselect {
143         font-size: 20px;
144     }
145     /*颜色 3种 默认是蓝色*/
146     .pagenumberbox.pnred .pagebtn {
147         color: #d9534f;
148         border-color:#d9534f;
149     }
150     .pagenumberbox.pngreen .pagebtn {
151         color: #5cb85c;
152         border-color:#5cb85c;
153     }
154     .pagenumberbox.pnyellow .pagebtn {
155         color: #f0ad4e;
156         border-color:#f0ad4e;
157     }

分页控制类CSS

时间: 2024-07-31 14:18:49

JS分页条的相关文章

Jquery-pagination.js分页处理

首先提供pagination.js的插件源码 /** * This jQuery plugin displays pagination links inside the selected elements. * * @author Gabriel Birke (birke *at* d-scribe *dot* de) * @version 1.1 * @param {int} maxentries Number of entries to paginate * @param {Object}

jsp、js分页功能的简单总结

一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要.分页技术,有选择的加载某部分数据,在数据量较大的时候,分部分加载数据.显示数据,可以有效提高程序的性能,当然,单纯的js的分页技术并没有这种效果. 所以,分页技术是web技术中比较常用的技术,而下面讨论的主要是两种分页技术:一种是jsp的分页技术,其读取数据分批次读取,操作页数跳转的时候才加载相应页面

jquery.pagination.js分页

参数说明 参数名 描述 参数值 maxentries 总条目数                           必选参数,整数 items_per_page 每页显示的条目数                       可选参数,默认是10 num_display_entries 连续分页主体部分显示的分页条目数                       可选参数,默认是10 current_page 当前选中的页面                      可选参数,默认是0,表示第1页

GridPanel分页条插件

GridPanel的分页条没有设置当前页显示条数的功能,会不大方便 主要是抄袭的http://www.cnblogs.com/badwps/archive/2011/04/15/2016440.html该文的设置,做了些修改,不再使用下拉框选择,改为手工输入 注意:此处插件是Ext.PagingToolbar的插件 plugins: [new Ext.ui.plugins.ComboPageSize({})] ComboPageSize.js下载地址

js分页实例

js分页实例 1.js_pageusers.html <!DOCTYPE html> <html> <head> <title>js_pageusers.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description"

jquery pagination.js 分页

js代码: var pageIndex = 0;     //页面索引初始值              var pageSize = 10;     //每页显示条数初始化,修改显示条数,修改这里即可              var where="";          //查询条件            var searchwhere="";    //查询条件                        function PageSet(data){    

局部刷新的js分页插件

补上写好的js分页插件.水平有限,可供参考.另外有好建议的可以在评论里面提出,我再做优化.废话不多说了,代码走起! (一)splitPage.js分页插件 直接copy就能使用: /*** * 功能:局部刷新分页显示表格内容 * 作者:JML * 版本:1.0 * 备注:自己封装的局部刷新分页插件,主要是想了解一下分页插件是如何运作的 * 缺陷:水平有限,插件很不灵活,还有两个硬编码块 * 建议:大家还是下载专门的js分页插件来进行使用吧(本代码可供参考) */ /** * 帮助文档: * 1.

js分页查询

/** * 分页说明: * 因为是JS分页,所以有2个方法必须自己手动写入,分别是getMaxCount()和findPage() * getMaxCount()为获得当前的记录总数, * findPage()为根据下方的3个变量查找的列表. * 然后还需在页面的最下方增加一个div,div的DIV为pageTool */ var pageCount=10;//每页数量 var pageIndex=1;//当前第几页 var maxPage=10;//总页数 var total=0;//总数 f

angular.js分页代码的实例

对于大多数web应用来说显示项目列表是一种很常见的任务.通常情况下,我们的数据会比较多,无法很好地显示在单个页面中.在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能.现在在学习angular,使用angularjs 分页,基于 directive 实现,样式使用的 bootstrap,直接在 html代码中加入 标签即可调用. 先来看下效果图 实例代码 1 app.directive('pagePagination', function(){ 2 return {