JS案例之1——pager 分页

原文:JS案例之1——pager 分页

学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路。

此处代码写的是静态分页。如果需动态分页,还可以修改下。第一次写,还有很多地方可以优化。希望各位大牛踊跃拍砖。

预览图

 

 

源代码

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
  5 <title> pager demo </title>
  6 <meta name="author" content="rainna" />
  7 <meta name="keywords" content="rainna's js lib" />
  8 <meta name="description" content="pager demo" />
  9 </head>
 10 <style>
 11 *{margin:0;padding:0;}
 12 li{list-style:none;}
 13 .j-curr{color:red;}
 14
 15 #list,#pager{width:400px;margin:50px auto;text-align:center;line-height:26px;}
 16 #list li{border-bottom:1px solid #eee;}
 17 #pager li{display:inline-block;padding:0 5px;cursor:pointer;}
 18 </style>
 19 <body>
 20 <div id="list">
 21     <ul>
 22         <li>01111111</li>
 23         <li>0222222</li>
 24         <li>0333333</li>
 25         <li>0444444</li>
 26         <li>0555555</li>
 27         <li>0666666</li>
 28         <li>0777777</li>
 29         <li>0888888</li>
 30         <li>0999999</li>
 31         <li>10101010</li>
 32         <li>11111111</li>
 33         <li>12121212</li>
 34         <li>13131313</li>
 35         <li>14141414</li>
 36         <li>15151515</li>
 37         <li>16161616</li>
 38         <li>17171717</li>
 39         <li>18181818</li>
 40         <li>19191919</li>
 41         <li>20202020</li>
 42         <li>01111111</li>
 43         <li>0222222</li>
 44         <li>0333333</li>
 45         <li>0444444</li>
 46         <li>0555555</li>
 47     </ul>
 48 </div>
 49 <div id="pager"></div>
 50
 51 <script>
 52 var pager = function(){
 53     //公共函数
 54     function T$(id){
 55         return document.getElementById(id);
 56     }
 57     function T$$(root,tag){
 58         return (root || document).getElementsByTagName(tag);
 59     }
 60     function $extend(object1,object2){
 61         for(var p in object2){
 62             object1[p] = object2[p];
 63         }
 64         return object1;
 65     }
 66     function $each(arr, callback, thisp) {
 67         if (arr.forEach){
 68             arr.forEach(callback, thisp);
 69         }else{
 70             for(var i = 0, len = arr.length; i < len; i++){
 71                 callback.call(thisp, arr[i], i, arr);
 72             }
 73         }
 74     }
 75
 76     //默认参数配置
 77     var defaultOptions = {
 78         elemShowCount:5,     //每页显示条数,默认为5条
 79         pageShowCount:4,     //显示的页码数目,默认显示4个页码
 80         showFirstPageBtnAndLastPageBtn:true,     //是否显示首页,尾页,默认显示
 81         showPrevBtnAndNextBtn:true,    //是否显示上一页,下一页,默认显示
 82         showPageNumTips:true,      //是否显示【1/7页】页面提示,默认显示
 83         showPageNum:true      //是否显示分页的数字,默认显示
 84     };
 85
 86     //主类构造函数 参数说明:bid为元素容器div的ID,pid为分页容器div的ID,options为重写的默认配置参数
 87     var showPage = function(bid,pid,options){
 88         var self = this;
 89         if(!(self instanceof showPage)){
 90             return new showPage(bid,pid,options);
 91         }
 92         self.container = T$(bid);    //元素容器div
 93         self.pagerBox = T$(pid);    //翻页容器div
 94         if(!self.container){
 95             return;
 96         }
 97         self.options = $extend(defaultOptions,options||{});
 98         self.elem = T$$(self.container,'li');     //需要分页的元素
 99         self.elemTotalCount = self.elem.length || 0;    //分页元素的总个数
100         self.pageTotalCount = Math.ceil(self.elemTotalCount/self.options.elemShowCount) || 0;   //总页数
101     };
102
103     showPage.prototype = {
104         constructor:showPage,
105         //显示当页的元素内容,参数currPageNum为当前页码,从0开始
106         showChangeElemCont: function(currPageNum){
107             var self = this;     //this为showPage对象
108             var nextPageCount = (currPageNum+1)*self.options.elemShowCount < self.elemTotalCount ? (currPageNum+1)*self.options.elemShowCount : self.elemTotalCount;     //判断为最后一页时,最后一页应该显示的数据条数
109             for(var i=0;i<self.elemTotalCount;i++){
110                 self.elem[i].style.display = 'none';
111             }
112             for(var i=currPageNum*self.options.elemShowCount,l=nextPageCount;i<l;i++){
113                 self.elem[i].style.display = 'block';
114             }
115         },
116         //显示当页的页码内容,参数currPageNum为当前页码,从0开始
117         showChangePageCont: function(currPageNum){
118             var self = this;      //this为showPage对象
119             var firstPageHtml = prevPageHtml = pageLinkHtml = nextPageHtml = lastPageHtml = pageTips = '';     //firstPageHtml:首页   prevPageHtml:上一页  pageLinkHtml:页码表   nextPageHtml:下一页  lastPageHtml:尾页   pageTips:页码提示
120             var startPage,endPage;        //startPage:页码列表中的第一页   endPage:页码列表中的最后一页
121             var pageShowMidCount = Math.ceil(self.options.pageShowCount/2);      //页码中间值,当超过这个值时,页码列表发生变化
122             if(self.pageTotalCount <= self.options.pageShowCount){           //总页码数小于等于默认要显示的页码数时,直接在当前页面显示全部的页码
123                 startPage = 0;
124                 endPage = self.pageTotalCount-1;
125             }else{
126                 if(self.options.pageShowCount%2 == 0){
127                     if((currPageNum + 1 - pageShowMidCount) <= 0){       //首页
128                         startPage = 0;
129                         endPage = self.options.pageShowCount-1;
130                     }else if((currPageNum + 1 + pageShowMidCount) >= self.pageTotalCount){            //尾页
131                         startPage = self.pageTotalCount-1 - self.options.pageShowCount + 1;
132                         endPage = self.pageTotalCount-1;
133                     }else{
134                         startPage = currPageNum - pageShowMidCount + 1;
135                         endPage = currPageNum + pageShowMidCount;
136                     }
137                 }else{
138                     if((currPageNum + 1 - pageShowMidCount) <= 0){       //首页
139                         startPage = 0;
140                         endPage = self.options.pageShowCount-1;
141                     }else if((currPageNum + 1 + pageShowMidCount - 1) >= self.pageTotalCount){            //尾页
142                         startPage = self.pageTotalCount-1 - self.options.pageShowCount + 1;
143                         endPage = self.pageTotalCount-1;
144                     }else{
145                         startPage = currPageNum - pageShowMidCount + 1;
146                         endPage = currPageNum + pageShowMidCount - 1;
147                     }
148                 }
149             }
150
151             //显示首页尾页
152             if(self.options.showFirstPageBtnAndLastPageBtn == true){
153                 firstPageHtml = '<li>首页</li>';
154                 lastPageHtml =     '<li>尾页</li>';
155             }
156             //显示上一页下一页
157             if(self.options.showPrevBtnAndNextBtn == true){
158                 if(currPageNum != 0) prevPageHtml = '<li>上一页</li>';       //首页不显示上一页
159                 if(currPageNum != self.pageTotalCount-1) nextPageHtml = '<li>下一页</li>';      //尾页不显示最后一页
160             }
161             //显示页码数字链接
162             for(var i=startPage,l=endPage;i<=l;i++){
163                 if(currPageNum==i){
164                     pageLinkHtml += '<li class="j-curr">' + (i+1) + '</li>';
165                 }else{
166                     pageLinkHtml += '<li>' + (i+1) + '</li>';
167                 }
168             }
169             //显示页码提示信息
170             if(self.options.showPageNumTips == true){
171                 pageTips = '<span>' +(currPageNum+1) + '/' + self.pageTotalCount + '</span>';
172             }
173             //拼出页码元素的整体内容
174             self.pagerBox.innerHTML = firstPageHtml + prevPageHtml + pageLinkHtml + nextPageHtml + lastPageHtml + pageTips;
175
176             var elems = T$$(self.pagerBox,'li');
177             $each(elems, function(o, i) {
178                 o.onclick = function() {
179                     if(o.innerText == '首页'){
180                         self.showChangeElemCont(0);
181                         self.showChangePageCont(0);
182                     }else if(o.innerText == '尾页'){
183                         self.showChangeElemCont(self.pageTotalCount-1);
184                         self.showChangePageCont(self.pageTotalCount-1);
185                     }else if(o.innerText == '上一页'){
186                         self.showChangeElemCont(currPageNum-1);
187                         self.showChangePageCont(currPageNum-1);
188                     }else if(o.innerText == '下一页'){
189                         self.showChangeElemCont(currPageNum+1);
190                         self.showChangePageCont(currPageNum+1);
191                     }else{
192                         index = parseInt(o.innerText) - 1;
193                         self.showChangeElemCont(index);
194                         self.showChangePageCont(index);
195                     }
196                 }
197             });
198         }
199     };
200
201     return{
202         onShowPage:function(bid,pid,options){
203             //调用主类
204             var st = new showPage(bid,pid,options);
205             st.showChangeElemCont(0);
206             st.showChangePageCont(0);
207         }
208     }
209 }();
210
211 pager.onShowPage('list','pager',{elemShowCount:4,pageShowCount:5});
212 </script>
213 </body>
214 </html>

源码下载:Download

时间: 2024-09-17 22:04:15

JS案例之1——pager 分页的相关文章

适用于WebForm Mvc的Pager分页组件C#实现_C#教程

本文为大家分享了自己写的一个Pager分页组件,WebForm,Mvc都适用,具体内容如下 分页控件其实就是根据链接在页面间传递参数,因为我看到MVC中你可以看到这样传递参数的new {para=val}这种方式传递参数,于是我想到用可以模仿这种传递参数的方式,那就用dynamic来作为参数对象传递. 下面是附上我写的具体的实现的代码 数据处理代码: 1.定义IPagedList接口 using System; using System.Collections.Generic; using Sy

JS代码实现table数据分页效果_javascript技巧

第一个:实现的很常见很简单的显示页数翻页 效果图: •这是HTML代码,很简单滴(我好像看到了被嫌弃的小眼神) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-"> <script src="js/jquery-...js"></script> <script src="js/demo.js

asp.net pager分页控件实现代码

这段代码是 pager分页控件的核心功能了  代码如下 复制代码 $.fn.extend({ JPager: function (cfg, pageIndex, pageSize) { if (cfg && pageIndex > 0 && pageSize>0) { var token = "#" + this.attr("id"); this.empty(); var pageFirst = function () {

Pear::Pager分页类简介

Pear的Pager分页类是一个很好用的php分页类,扩展性很强,能够适应各种分页情况的需求,至少我在几年间大大小小的项目里,基本上没有为分页额外写过代码,全部都是用的Pager,足见Pager的可用性之强.下面用代码来看看它的使用范例: 例子1 <?php require_once 'Pager/Pager.php'; $params = array( 'mode' => 'Jumping', 'perPage' => 3, 'delta' => 2, 'itemData' =&

js对文章内容进行分页的具体实现

 这篇文章主要介绍了使用js对文章内容进行分页的具体实现,需要的朋友可以参考下 Thinkphp中文章显示代码:  代码如下: <div id="showContent">{$article.content|htmlspecialchars_decode}</div>  <div id="articlePages"></div>    js实现代码:   代码如下: <script type="text

JS+CSS实现的拖动分页效果实例

  本文实例讲述了JS+CSS实现拖动分页效果的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

原生js编写基于面向对象的分页组件_javascript技巧

本文实例为大家分享了一个基于面向对象的分页组件的具体实现代码,供大家参考,具体内容如下 文字表达有限,直接上代码了 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>一个基于面向对象的分页组件</title> <style> html,body{padding:0;margin:0;} p{padding:0;margin:0;} a

JS+CSS实现的拖动分页效果实例_javascript技巧

本文实例讲述了JS+CSS实现拖动分页效果的方法.分享给大家供大家参考.具体实现方法如下: <html> <head> <title>拖动分页</title> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <style> body{ border:0px; margin:0px; overflow:hidden; backgrou

js对文章内容进行分页示例代码_javascript技巧

Thinkphp中文章显示代码: 复制代码 代码如下: <div id="showContent">{$article.content|htmlspecialchars_decode}</div> <div id="articlePages"></div> js实现代码: 复制代码 代码如下: <script type="text/javascript"> var obj = docum