* 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. win7升级为Win10 10586版本,出现应用商店打不开的解决办法

    把公司的win7升级为了win10,但是打开应用商店时是白的,什么都没有,过一会之后,会有提示信息. 报的错误是: 错误代码:0X80072ee2 最后,我的解决办法是: 首先,咱们返回到win10 ...

  2. Windows Azure Service Bus Notification Hub推送通知

    前言 随着Windows Azure 在中国的正式落地,相信越来越多的人会体验到Windows Azure带来的强大和便利.在上一篇文章中, 我们介绍了如何利用Windows Azure中的Servi ...

  3. 达洛克战记3 即将开服! What's New!

    历经数个月的开发,达洛克战记3即将全新开服! 剧情: 回归到三大种族起源时期,三大种族并没有像现在三足鼎立.人类一直处于统治地位.但是突然间一群巨人的出现,让人类损失惨重,身为勇者,需要探索巨人背后的 ...

  4. spring源码分析(二)Aop

    创建日期:2016.08.19 修改日期:2016.08.20-2016.08.21 交流QQ:992591601 参考资料:<spring源码深度解析>.<spring技术内幕&g ...

  5. NPOIExcelHelper

    using System.Data; using System.Configuration; using System.Web; using System.IO; using System.Text; ...

  6. Android 数据传递(一) Activity之间的数据传递

    bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...

  7. 大叔也说Xamarin~Android篇~为HttpClient共享Session,android与api的session共享机制

    回到目录 杂谈 在进行android进行开发时,我们的数据一般通过接口来获收,这里指的接口泛指web api,webservice,wcf,web应用程序等:它们做为服务端与数据库进行直接通讯,而AP ...

  8. [Maven]Eclipse插件之Maven配置及问题解析.

    前言:今天在自己环境装了Maven环境, 并且安装了Eclipse插件, 在查找插件过程中确实遇到一些问题, 好不容易找到一个  却又有问题.装好了插件之后, 用Eclipse创建Maven项目却出现 ...

  9. Atitit 颜色平均值cloor grb hsv模式的区别对比

    Atitit 颜色平均值cloor grb hsv模式的区别对比 使用hsv模式平均后会变得更加的靓丽一些..2 public class imgT { public static void main ...

  10. Atitit vod click event design flow  视频点播系统点击事件文档

    Atitit vod click event design flow  视频点播系统点击事件文档 重构规划1 Click cate1 Click  mov4 重构规划 事件注册,与事件分发管理器分开 ...