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>

JS小插件之1——pager 分页

时间: 2024-11-01 02:09:50

JS小插件之1——pager 分页的相关文章

JS小插件之2——cycle元素轮播

元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <title> cycle demo </titl

js 小插件

avaScript 是一个在全球范围内都非常受欢迎的脚本语言,由 Netscape 的 LiveScript 发展而来,可用于 Web 开发.移动应用开发.服务器端开发等.它因简单.安全.动态和跨平台等特点而受到新老开发者的追捧.本文整理了一些基于 Javascript 的开源功能插件和框架,希望能给你的开发带来帮助. 一.MV* 框架和库 1.Angular JS Angular JS (Angular.JS) 是一组用来开发 Web 页面的框架.模板以及数据绑定和丰富 UI 组件.它支持整个

自己写的一个Js小插件

这是效果图.上面一个过滤标签.下面弹出框,选择日,周,月.我的用途主要是报表查询的时候根据这3种类型来查询数据用的. 这里分享下代码. Js代码 (function ($) { $.extend($.fn, { DtFilter: function (setting) { var container = this.html('<span type="text" class="filterDiv"><i class="fa fa-filte

js小插件-html表单的静态验证

 html表单静态验证: 对于表单的验证,大多数时候都是交由服务器完成,那为什么在html中还要做这个事情呢?但是呢,如果把所有的信息都交由服务器处理,会加大服务器的负担,并且对于服务器来说一些不合法的信息验证完全没必要. 所以呢,在html中简单的验证一下表单是有必要的,一来是为了减轻服务器的负担,二来也是为了给用户的一些简单的操作提示,以输入合法的信息. 所谓的静态验证,就是再不需要服务器的情况下由html自身就可完成的验证,在html中我们可以简单的验证一下我们要提交的表单信息,验证通

JS小插件-对输入框获取与失去焦点时的操作

对于html文件,用到最多的是<input>标签,用来供用户输入信息,然而,我们想要实现这样的效果: 当用户没输入内容的时候,输入框内有默认的内容,当用户点击输入框的时候,输入框就会清空默认的内容供用户输入,而当用户没有输入任何内容时就点击其他地方时该输入框又会出现默认的内容,这里用简单的代码实现了该功能 版权声明:本文为博主原创文章,未经博主允许不得转载.

JS案例之1——pager 分页

原文:JS案例之1--pager 分页 学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路. 此处代码写的是静态分页.如果需动态分页,还可以修改下.第一次写,还有很多地方可以优化.希望各位大牛踊跃拍砖. 预览图 源代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; char

浮动【电梯】或【回到顶部】小插件:iElevator.js

iElevator.js 是一个jquery小插件,使用简单,兼容IE6,支持UMD和3种配置方式,比锚点更灵活. Default Options _defaults = { floors: null, btns: null, backtop: null, selected: '', sticky: -1, visible: { isHide: 'no', numShow: 0 }, speed: 400, show: function(me) { me.element.show(); }, h

VALIDFORM前端小插件实现表单验证;

好开心啊,有了这个小插件就不用在服务器端去写用户输入的东西是否合法,又美观: 这个是官网,使用入门那儿很简单,不如直接改demo; 下载的demo就是这个: 小李子(永奇商城注册页面表单验证): 就是这个,那个邮箱正则验证效果如何加上去的呢: 看demo就知道(把demo里面之中整个demo文件夹拷贝在项目之中,将css之中validform必须的留下,其他删除掉,也就是demo文件夹里面/*==========以下部分是Validform必须的===========*/这一行字下面的css样式

H5柱状图2D小插件

1 概述 前端技术在代码的世界里是不可或缺的,而在里面有个东西是经常使用的那便是 js插件,作为一个小白本章节学习如何封装插件,分享下自己的小东西:如何纯js去自己去封装一个柱状图2D小插件? 2 有点low的效果图如下: 3 主要功能 支持超简单使用 支持数据类型json对象 支持设置左右边距 支持设置柱状图宽度 支持柱状图的颜色 支持动画过渡 当然也可以自己增加背景图片功能使其看起来好看一点 ...后续功能可以自己酌情添加 4实现方式 首先 ,我们需要一个容器,在这里只需要一个div就可以了