用面向对象实现的纯js分页
来源:互联网 发布:雅庭世匠真的假的 知乎 编辑:程序博客网 时间:2024/05/22 14:07
纯的javascript实现的面向对象的分页脚本 ,万能的分页脚本,跨平台的分页脚本
最近因为项目的原因,把此前写的分页组件重构了下,现在的显示风格是类似百度的那种,对整个代码的结构也优化了,增加了几个亮点:
1、将参数对象化,这也是“javascript语言精粹”中提倡的,这样可以方便的处理默认参数。
2、通过传入参数显示的支持了分页是异步还是同步的,默认是同步的,即刷新的。
3、添加了和CSS的接口,组件本身已经完全实现了功能,并有基本的样式,但是通过CSS的接口,可以使得通过附加的外部样式来改变或者美化分页的显示效果。
欢迎大家指正,在项目中使用后,同事都说不错,呵呵。
/** * 带页码的分页* new PagerB({recordCount:36, pageContainer:"page",funPageSearch:function(currentPage){location="testPage.html?currentPage="+currentPage;},currentPage:1,pageSize:10,pageNum=12,sync:false});<br/>* recordCount 总的记录数<br/> * pageContainer容纳分页元素的id<br/>* funPageSearch 回调的查询方法<br/>* currentPage 当前页,默认为1<br/>* pageSize 每页的记录数,默认10条<br/> * pageNum 每页显示的页码数量,默认值=10,最小值亦为10<br/>* sync 同步还是异步,默认为同步<br/>* @author:yxd<br/>* email:yxd_yxd2008@163.com
* 附加的样式代码 <style type="text/css"> #pager{text-align:center;margin:30px auto;padding:3px} #pager>span{font-weight:700;} #pager>div span{margin:2px;padding:3px 5px;} #pager span.use{border:#dbdbdb 1px solid;color:#666;text-decoration:none; cursor:pointer;} #pager>div span.cur{background:#fb4e0b;border:1px solid #f03b00;color:#fff} #pager>div span.use:hover{background:#fb4e0b;border:1px solid #f03b00;color:#fff} #pager .unUse{display:none} </style> */ function PagerB(pageInfo){ this.recordCount=pageInfo.recordCount;this.pageSize=pageInfo.pageSize || 10;this.pageContainer=$("#"+pageInfo.pageContainer); this.funPageSearch=pageInfo.funPageSearch;this.currentPage=pageInfo.currentPage || 1;this.totalPage=this.calculateTotalPage(); this.pageNum=Math.max(pageInfo.pageNum || 10 , 10); pageInfo.sync===false ? this.sync=false:this.sync=true; this.htmlNumContainer=null;//页码的容器div this.htmlFirstPage=null; //首页 this.htmlPrvPage=null; //上一页 this.htmlNextPage=null; //下一页 this.htmlLastPage=null; //尾页 this.htmlPageNumContainer=null; //页码集合的容器div this.htmlPageNum=null; //所有页码的集合 this.htmlTotalRecord=null; // this.htmlPageSize=null; this.htmlTotalPage=null; this.draw(); } PagerB.prototype={ draw:function(){ /* *页码的显示形式为: * <div id="pager"> * 共<span>300</span>行 * 每页<span>20</span>行 * 共<span>15</span>页 * <div class="a"> * <span class="unUse">首页</span> * <span class="unUse">上一页</span> * <div class="b"> * <span class="cur">1</span> * <span class="use">2</span> * <span class="use">3</span> * </div> * <span class="use">下一页</span> * <span class="use">尾页</span> * </div> * </div> */ var that=this;var pageHtml='共<span>'+this.recordCount+'</span>行 '+'每页<span>'+this.pageSize+'</span>行 '+'共<span>'+this.totalPage+'</span>页 '+"<div class='a' style='display:none'>"+"<span>首页</span> "+"<span>上一页</span> "+"<div class='b' style='display:inline'>"+this.setPageNum()+"</div>"+" <span>下一页</span>"+" <span>尾页</span>"+"</div>";this.pageContainer.append(pageHtml);this.htmlTotalRecord=$("span:eq(0)",this.pageContainer);this.htmlPageSize=$("span:eq(1)",this.pageContainer);this.htmlTotalPage=$("span:eq(2)",this.pageContainer);this.htmlNumContainer=$(".a",this.pageContainer);this.htmlFirstPage=$(".a > span:eq(0)",this.pageContainer);this.htmlPrvPage=$(".a > span:eq(1)",this.pageContainer); this.htmlNextPage=$(".a > span:eq(2)",this.pageContainer);this.htmlLastPage=$(".a > span:eq(3)",this.pageContainer);this.htmlPageNumContainer=$(".b",this.htmlNumContainer);this.htmlPageNum=$("span",this.htmlPageNumContainer);this.htmlFirstPage.click(function(){if(that.currentPage!=1){that.currentPage=1;that.gotoPage();}});this.htmlPrvPage.click(function(){if(that.currentPage!=1){that.currentPage--;that.gotoPage();} });this.htmlNextPage.click(function(){if(that.currentPage!=that.totalPage){that.currentPage++;that.gotoPage();}});this.htmlLastPage.click(function(){if(that.currentPage!=that.totalPage){that.currentPage=that.totalPage;that.gotoPage();}});if(this.totalPage>1){ this.htmlNumContainer.css("display","inline"); this.setStyle();}}, setPageNum:function(){//设置每页显示的页码,//页码的显示取决与3个因素://1、每页显示的页码数量//2、当前页//3、总页数 var pageNumArray=[];var firstNum=1,lastNum=this.totalPage; //当总页数>每页显示的页数时才需要额外的处理 if(this.totalPage>this.pageNum){var halfNum=Math.floor(this.pageNum/2);firstNum=this.currentPage-halfNum;if(firstNum<=0){firstNum=1;}else{var isTotalPage=false;while((firstNum+this.pageNum)>(this.totalPage+1)){isTotalPage=true;firstNum--;}}if(isTotalPage){lastNum=this.totalPage;}else{lastNum=firstNum+this.pageNum-1;} } for(var i=firstNum;i<=lastNum;i++){pageNumArray.push("<span>"+i+"</span>");} return pageNumArray.join(" ");},setStyle:function(){//设置显示的样式var that=this;if(this.currentPage!=1){this.htmlFirstPage.css({cursor:"pointer",color:""}).removeClass("unUse").addClass("use");this.htmlPrvPage.css({cursor:"pointer",color:""}).removeClass("unUse").addClass("use");}else{this.htmlFirstPage.css({cursor:"",color:"grey"}).removeClass("use").addClass("unUse");this.htmlPrvPage.css({cursor:"",color:"grey"}).removeClass("use").addClass("unUse");}if(this.currentPage!=this.totalPage){this.htmlLastPage.css({cursor:"pointer",color:""}).removeClass("unUse").addClass("use");this.htmlNextPage.css({cursor:"pointer",color:""}).removeClass("unUse").addClass("use");}else{this.htmlLastPage.css({cursor:"",color:"grey"}).removeClass("use").addClass("unUse");this.htmlNextPage.css({cursor:"",color:"grey"}).removeClass("use").addClass("unUse");}this.htmlPageNum.each(function(){var pageNum=Number($(this).html());if(that.currentPage!=pageNum){$(this).css({cursor:"pointer",textDecoration:"underline"}).click(function(){that.currentPage=pageNum;that.gotoPage();}).mouseover(function(){$(this).css("color","green");}).mouseout(function(){$(this).css("color","");}).removeClass("cur").addClass("use");}else{$(this).css("color","blue").removeClass("use").addClass("cur");}});},reDraw:function(_recordCount,_pageSize){this.recordCount=_recordCount;this.pageSize=_pageSize || this.pageSize;this.currentPage=1;this.totalPage=this.calculateTotalPage();this.htmlTotalRecord.html(this.recordCount); this.htmlPageSize.html(this.pageSize); this.htmlTotalPage.html(this.totalPage);if(this.totalPage>1){this.htmlNumContainer.css("display","inline");this.htmlPageNumContainer.html(this.setPageNum());this.htmlPageNum=$("span",this.htmlPageNumContainer);this.setStyle();}else{this.htmlNumContainer.css("display","none");}}, calculateTotalPage:function(){//计算总页数return Math.floor((this.recordCount+this.pageSize-1)/this.pageSize);},gotoPage:function(){if(!this.sync){//异步时,需要更新组件的外观this.htmlPageNumContainer.html(this.setPageNum());this.htmlPageNum=$("span",this.htmlPageNumContainer);this.setStyle();}this.funPageSearch(this.currentPage);} };
效果如下图所示:
- 用面向对象实现的纯js分页
- 纯js实现分页
- 纯JS实现分页
- 纯JS实现简单的分页功能
- 【转载】纯js实现分页
- 用面向对象的思想实现分页功能
- js面向对象分页器
- 纯的js分页代码
- 纯js写的分页
- jQuery+AJAX实现纯js分页功能
- php实现面向对象的数据分页显示
- 纯JS写的分页代码。
- base.js很多面向对象的js实现封装
- 面向对象的js
- js的面向对象
- 面向对象的js
- js的面向对象
- 面向对象的JS
- 搭建ssh框架环境心得
- C++ 内存管理以及内存泄露
- 十道海量数据处理面试题
- <转>Android2.2 API 中文文档系列(5) —— View
- iOS-利用本地数据来代替远程UIWebView请求
- 用面向对象实现的纯js分页
- 函数指针用法
- linux设备模型学习笔记——理论篇
- 想学习linux系统技术支持维护的朋友们 弱弱地看看吧
- 触发器知识点!
- <转>Android2.2 API 中文文档系列(6) —— ImageView
- HippCRM入口 index.php源代码解析
- C#解析HTML
- android背景选择器selector用法汇总