* 2017.5.11 增加了迭代回调功能,用于实现实时的页数展示与分页数据请求。

* 2016.7.03 修复bug,优化代码逻辑

* 2016.5.25 修复如果找不到目标对象的错误抛出。

* 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bug

* 2016.4.3   实现原生JS分页功能

 ;
(function(root) {
'use strict'; function page(params) { this.dom = params.dom || null;
this.fn = params.fn || null;
this.padding = params.padding || 2;
this.total = params.total;
this.curpagenumber = params.curpagenumber || 0;
this.detailed = params.detailed || null; this.cur = 1;
this.start = 1;
this.end = this.total; if (this.curpagenumber) {
this.cur = this.curpagenumber;
} this.dom && this.total && this.core(); }
page.prototype.core = function(curentPageNumber) {
var a = []; if (curentPageNumber) {
this.cur = curentPageNumber;
} if (this.cur > 1) {
a.push('<a href="javascript:;" class="prev">上一页</a>');
this.detailed && a.push('<a href="javascript:;" class="first">首页</a>');
a.push('...');
} if (this.total > this.padding * 2 + 1) { //判断是否启用间隔数,如果总页数大于间隔数的2倍加1的话。
if (this.cur <= this.padding) { // 如果当前页码小于间隔数
this.start = 1;
this.end = this.padding * 2 + 1;
} else if (this.cur > this.padding && this.total >= this.cur + this.padding) { // 如果当前页码大于间隔数且总页数大于当前页面加上间隔数
this.start = this.cur - this.padding;
this.end = this.cur + this.padding;
} else {
this.start = this.total - this.padding * 2;
this.end = this.total;
}
} else {
this.start = 1,
this.end = this.total;
} for (; this.start <= this.end; this.start++) {
if (this.cur != this.start) {
a.push('<a href="javascript:;">' + this.start + '</a>');
} else {
a.push('<span class="cur">' + this.cur + '</span>');
}
}
if (this.cur < this.total - 1) {
a.push('...');
this.detailed && a.push('<a href="javascript:;" class="last">尾页</a>');
}
if (this.cur < this.total) {
a.push('<a href="javascript:;" class="next">下一页</a>');
} this.dom.innerHTML = a.join('');
this.bind();
}; page.prototype.bind = function() {
var _this = this; this.dom.onclick = function(event) {
var event = event || window.event,
src = event.srcElement || event.target; if (src.nodeName == 'A') {
switch (src.className) {
case '':
_this.cur = parseInt(src.innerHTML);
break;
case 'prev':
_this.cur = --_this.cur;
break;
case 'next':
_this.cur = ++_this.cur;
break;
case 'last':
_this.cur = _this.total;
break;
case 'first':
_this.cur = 1;
}
_this.fn && _this.fn(_this.cur);
_this.core();
}
}; }; root.page = page; })(window);

一般使用方式:

 page({
'dom':document.getElementById('page'),
'total':13,
'padding':2,
'fn':function(cur){
console.log(cur);
}
});
/* {} 是一个参数对象,其参数详细如下:
|- dom :一个dom对象,用于保存生成的页码。
|- total : 总页数。
|- padding : 生成的间隔,默认间隔为2个。
|- detailed : 是否出现首页及尾页
|- fn : 当前页码的回调函数。
*/

高级使用方式:在接口中回调

 function getData(pageNum) {
$.post('data.htm', {
'pageNumber': pageNum
}, function(data) {
if (data.errorCode === 0) {
page({
dom: document.querySelectorAll('.pages')[0],
total: data.total,
curpagenumber: pageNum,
fn: function(num) {
getData(num);
}
});
}
})

自己封装的JS分页功能[用于搭配后台使用]的更多相关文章

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

    一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要.分 ...

  2. js -- 分页功能

    html 代码 <html> <head> <meta charset='utf-8'> <script type="text/javascript ...

  3. jQuery+AJAX实现纯js分页功能

    使用jQuery的AJAX技术,在bootstrap的框架下搭建的纯js分页 bootstrap作为Twitter推的一款前端框架,效果个人还是觉得很不错的.这次只是拿来作为网页元素的css样式表使用 ...

  4. 前端js分页功能的实现,非常实用,新手必看

    分享一个前端拿到数据后,自己生成分页的案例,案例如图显示,点击搜索后查询数据,显示数据列表,前端根据数据显示正确的分页 附上代码:代码附上,简单粗暴,自己用过的,兼容性好,没有封装,可以很好的分页原理 ...

  5. js分页功能实现

    实现一个js的分页并在弹出框中显示 1.分页插件使用:bootstarp-paginator.js,需要先引入bootstarp.js和jquery.js等: !function($){"u ...

  6. 纯JS前端分页方法(JS分页)

    1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...

  7. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  8. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  9. [Ext JS 4] Grid 实战之分页功能

    前言 分页功能的实现有两种途径: 一种是服务端分页方式, 也就是web客户端传递页码参数给服务端,服务端根据页面参数返回指定条数的数据.也就是要多少取多少.这种方式比较适合Grid  的数据量很大,需 ...

随机推荐

  1. Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!好了,废话不多说,就开始吧, ...

  2. Wix 安装部署教程(十二) -- 自动更新WXS文件

    上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全让程序自动去更新WXS文件,然后再用CCNet去自动编译,这样 ...

  3. 用批处理文件进行TCP/IP设置,方便在家与办公IP切换

    在公司用公司分配的固定IP上网,回家后又要将本本设置为家里的固定IP上网,每次都要手动重复一个过程: 打开网络中心,选择本地连接,进入属性然后选择IPV4进行TCP/IP的设置,填入IP,子网掩码DN ...

  4. Weibo用户地图

    1.1.1 摘要 现在,许多应用都提供地理位置定位的功能,只要用户开放他们的位置信息就可以实现定位了,今天我们将创建一个基于Google 地图的微博用户地图,这里我们将通过Weibo API获取微博用 ...

  5. DNS 正向查找与反向查找

    原创地址:http://www.cnblogs.com/jfzhu/p/3996323.html 转载请注明出处 所谓正向查找,就是说在这个区域里的记录可以依据名称来查找对应的IP地址.反向查找就是在 ...

  6. Linux—解压缩

    压缩和解压("//"命令的解释) 常用压缩格式    .zip    .gz    .bz2    .tar.bz2        .tar.gz .zip格式压缩: zip 压缩 ...

  7. sql的OUTER APPLY

    今天写一个查询sql,其中涉及到一个银行卡绑定表(表名:BankBind),我要将这个表的开户行字段的值进行分割出省份.支行, 这个开户行字段存储的值如“广东省广东省分行江门市分行恩平市支行”.“招商 ...

  8. MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength

    返回目录 为什么要对minLength和maxLength这两个方法进行扩展呢,是因为这样一个需求,在用户注册时,可以由用户自己决定他们输入的字符,中文,英文,数字均可,这样做了之后,使用户的体验更好 ...

  9. Atitit.会员卡(包括银行卡)api的设计

    Atitit.会员卡(包括银行卡)api的设计 1. 银行卡的本质是一种商业机构会员卡1 2. 会员卡号结构组成1 2.1. ●前六位是:发行者标识代码 Issuer Identification N ...

  10. redis基本配置和相关设置

    redis-cli:the redis command line interface command line usage: $redis-cli incr mycounter 输出的结果只会显示在终 ...