pagination分页插件
最近做了个项目,有用到分页, 这类插件应该是很常用的, 虽然网上很多现成的分页插件, 但是还是想着自己写一个, 给自己积累点东西, 顺便练练手, 写了差不多3个小时左右, 代码如下:
代码:
- <!DOCTYPE HTML>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>分页插件</title>
- <style type="text/css">
- body{padding: 0px; margin: 0px;}
- .content{width: 980px; margin: 0 auto; padding-top: 50px;}
- ul{margin:0px; padding:0px;}
- ul li{margin:0px; padding:0px; list-style:none; float:left;}
- </style>
- </head>
- <body>
- <div class="content">
- <p>当前页: <input type="text" id="txtPageIndex" /></p>
- <p>总页数: <input type="text" id="txtPageCount" /></p>
- <p><button id="btnSubmit">submit</button></p>
- <br />
- <br />
- <p>输出:</p>
- <div id="pageBox">
- </div>
- </div>
- <script type="text/javascript">
- function byID(id){
- return document.getElementById(id);
- }
- var ui = {};
- ui.btnSubmit = byID('btnSubmit');
- ui.txtPageIndex = byID('txtPageIndex');
- ui.txtPageCount = byID('txtPageCount');
- ui.pageBox = byID('pageBox');
- ui.btnSubmit.onclick = function(){
- var pageIndex = ui.txtPageIndex.value;
- var pageCount = ui.txtPageCount.value;
- var options = {
- pageIndex: parseInt(pageIndex),
- pageCount: parseInt(pageCount),
- container: ui.pageBox
- };
- if(options.pageCount > 0){
- var page = new pagination(options);
- page.init();
- }else{
- alert('总页数不能小于0');
- }
- };
- function pagination(options){
- this.pageIndex = options.pageIndex || 1;
- this.pageCount = options.pageCount;
- this.showPage = options.showPage || 3;
- this.container = options.container;
- }
- pagination.prototype = {
- init: function(){
- /*初始化检查当前页是否合理*/
- this.pageIndex = this.pageIndex < 1 ? 1 : this.pageIndex;
- this.pageIndex = this.pageIndex > this.pageCount ? this.pageCount : this.pageIndex;
- /*渲染UI*/
- this.render();
- },
- render: function(){
- var pageList, setting;
- pageList = [];
- setting = this.getSetting(this.pageIndex);
- pageList.push('<ul class="pagination">');
- if(this.pageIndex > 1){
- pageList.push('<li><button value="' + setting.prev + '">上一页</button></li>');
- if(setting.start > 1){
- pageList.push('<li><button value="1">1</button></li>');
- }
- if(setting.start > 2){
- pageList.push('<li>...</li>');
- }
- }else{
- pageList.push('<li><button value="1" disabled="disabled">上一页</button></li>');
- }
- for (var i = setting.start; i <= setting.end; i++) {
- if(i == this.pageIndex){
- pageList.push('<li><button value="' + i + '" disabled="disabled">' + i + '</button></li>');
- }else{
- pageList.push('<li><button value="' + i + '">' + i + '</button></li>');
- }
- };
- if(this.pageIndex < this.pageCount){
- if(setting.end < this.pageCount){
- if(setting.end < (this.pageCount - 1)){
- pageList.push('<li>...</li>');
- }
- pageList.push('<li><button value="' + this.pageCount + '">' + this.pageCount + '</button></li>');
- }
- pageList.push('<li><button value="' + setting.next + '">下一页</button></li>');
- }else{
- pageList.push('<li><button value="' + this.pageCount + '" disabled="disabled">下一页</button></li>');
- }
- pageList.push('</ul>');
- this.container.innerHTML = pageList.join('\n');
- this.regEvent();
- },
- regEvent: function(){
- /*事件注册*/
- var _this = this;
- var button = this.container.getElementsByTagName('button');
- for(var i = 0; i < button.length; i++){
- button[i].onclick = function(){
- _this.change(parseInt(this.value));
- };
- }
- },
- change: function(index){
- /*当前页改变时触发*/
- this.pageIndex = index;
- this.render();
- this.onChange(index);
- },
- getSetting: function(index){
- var start, end, prev, next, s, e;
- s = 0;
- e = 0;
- start = index - this.showPage;
- end = index + this.showPage;
- if(start < 1){
- s = Math.abs(start) + 1;
- start = 1;
- }
- if(end > this.pageCount){
- e = end - this.pageCount;
- end = this.pageCount;
- }
- if(s > 0 && e <= 0){
- e = s + end;
- end = e > this.pageCount ? this.pageCount : e;
- }else if(e > 0 && s <= 0){
- s = start - e;
- start = s < 1 ? 1: s;
- }
- prev = index > start ? index - 1 : 1;
- next = index < end ? index + 1 : end;
- /*核心算法, 根据当前页计算出显示的起始页和截止页, 上一页, 下一页 这些数据*/
- return {start: start, end: end, prev: prev, next: next};
- },
- onChange: function(index){
- /*空函数, 可覆盖*/
- console.log(index);
- }
- };
- </script>
- </body>
- </html>
pagination分页插件的更多相关文章
- Slider 滚动条 Pagination分页插件 JS Ajax 数据范围筛选 加载 翻页 笔记
入职以后的第二个任务 根据用户所选的价格范围 筛选数据 修复BUG - 筛选数据后 总数没有更新.列表显示错误.翻页加载错误 用到的一些知识点 jquery插件系列之 - Slider滑块 max ...
- jQuery Pagination分页插件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jQuery Pagination分页插件--刷新
源码地址:https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/FenYE/FenYeDemo.aspx ...
- JQuery Pagination 分页插件 增加了首页尾页以及跳转功能
JQuery分页插件 挺好用的 但是官方是没有提供首页尾页以及跳转功能 我觉得这个功能可以有,于是就改进了一下 一个js一个css从连接里面下 链接:http://pan.baidu.com/s/1n ...
- Jquery Pagination分页插件使用
JqueryPagination是个简单轻量级的分页插件,使用起来很容易,只要初始化一个实例,并设置总数量.翻页回调函数.其它参数就可以实现无刷新分页功能了. 准备工作 下载jquery.min.js ...
- jQuery Pagination分页插件--无刷新
源码:https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/FenYE/FenYeAjax.aspx 代 ...
- jQuery Pagination分页插件的使用
一.引用CSS和JS: <link href="/Content/Plugins/jQuery.Pagination_v2.2/pagination.css" rel=&qu ...
- Jquery 分页插件 Jquery Pagination
Jquery 分页插件 Jquery Pagination 分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也 ...
- Jquery前端分页插件pagination使用
插件描述:JqueryPagination是一个轻量级的jquery分页插件.只需几个简单的配置就可以生成分页控件.并且支持ajax获取数据,自定义请求参数,提供多种方法,事件和回调函数,功能全面的分 ...
随机推荐
- JavaScript学习总结(十六)——Javascript闭包(Closure)
原文地址: http://www.cnblogs.com/xdp-gacl/p/3703876.html 闭包(closure)是Javascript语言的一个难点,也是它的特色, 很多高级应用都要依 ...
- OC基础7:变量和数据类型
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.有时候初始化需要让对象带有初始值,那么 ...
- Android自己定义组件系列【7】——进阶实践(4)
上一篇<Android自己定义组件系列[6]--进阶实践(3)>中补充了关于Android中事件分发的过程知识.这一篇我们接着来分析任老师的<可下拉的PinnedHeaderExpa ...
- cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...
- pixel像素与物理像素
- poj 2431
大意: 有n个加油点,给出每个加油点距离终点的位置和能加多少油,最后一行给出总长度和最初的油量.求最少加几次油能到终点,不能到的话输出-1. Sample Input 4 4 4 5 2 11 5 1 ...
- MSMQ是什么?
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位 ...
- Hadoop 安装(3) JDK 的安装
使用vsftp上传,JDK 和 Hadoop 到 Hadoop 用户目录. 安装JDK root 身份登录Slave4.Hadoop,在 /usr 下创建 "Java"文件夹,将j ...
- 02js高级Function
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Unicode解码、URL编码/解码
+ (NSString *) stringByReplaceUnicode:(NSString *)string { NSMutableString *convertedString = [strin ...