写了个pager, 可供参考
/*
Author: Calos
Description: patv2 pager
!import: this pager goes with the time, we just temporarily stay, what a sad fact!
*/
(function ($) {
$.fn.patpager = function (options) {
options = options || {
turnPageTriggered: function (indexer) {
indexer = indexer || { pageIndex: 1, pageSize: 10 };
}, pageIndex: 1, pageSize: 10, pageCount: 10
};
var pagerStatus = { pageIndex: options.pageIndex || 1, pageSize: options.pageSize || 10 };
var $this = $(this);
$this.children().remove();
var timestamp = new Date().getTime();
var caching = {};
var fetchIndexer = function (indexerTo, transform) {
if (options.turnPageTriggered) {
transform();
options.turnPageTriggered(indexerTo);
}
}
var components = {
Turntopage: '<label>Turn to page</label>',
pageIndex: function (num) { return '<input type="text" class="pageTo" value=' + num + '>'; },
previousPage: '<a class="prev"><<</a>',
curStatus: function (pageIndex, totalPages) { return 'page <span class="cur">' + pageIndex + '</span> of <span class="totalPages">' + totalPages + '</span>'; },
nextPage: '<a class="next">>></a>'
};
var methods = {
createPager: function (pageIndex, totalPage) {
var html = '<div class=' + timestamp + ' >' + components.Turntopage + components.pageIndex(pageIndex) + components.previousPage + components.curStatus(pageIndex, totalPage) + components.nextPage + '</div>';
$this.html(html);
},
refreshCache: function () {
caching = {
pageTo: $this.find('.pageTo'),
prev: $this.find('.prev'),
pageIndex: $this.find('.cur'),
totalPages: $this.find('.totalPages'),
next: $this.find('.next')
}
$(".prev,.next").css('cursor', 'pointer');
},
initPager: function (option) {
methods.createPager(option.pageIndex, option.pageSize);
this.refreshCache();
},
pageIndexChanged: function (pager, sendInitTableRequest) {
pager = pager || { pageTo: 1, pageSize: 10 };
var totalPage = sendInitTableRequest(pager);
caching.pageIndex.text(pager.pageTo);
},
setCurrentPage: function (pageTo) { caching.pageIndex.text(pageTo >= 1 ? pageTo : 1) },
getCurrentPage: function () { return parseInt(caching.pageIndex.text()); },
ensureFirstPage: function () {
return this.getCurrentPage() === 1;
},
ensureLastPage: function () {
return this.getCurrentPage() === options.pageCount;
},
turnToPreviousPage: function () {
pagerStatus.pageIndex = methods.getCurrentPage() - 1;
fetchIndexer(pagerStatus, function () {
methods.setCurrentPage(pagerStatus.pageIndex);
});
},
turnToNextpage: function () {
pagerStatus.pageIndex = methods.getCurrentPage() + 1;
fetchIndexer(pagerStatus, function () {
methods.setCurrentPage(pagerStatus.pageIndex);
});
},
turnTopage: function (index) {
pagerStatus.pageIndex = index;
fetchIndexer(pagerStatus, function () {
methods.setCurrentPage(pagerStatus.pageIndex);
});
},
ensureValidPageIndex: function () {
var i = caching.pageTo.val();
var c = parseInt(caching.totalPages.text());
if (i <= 0) { caching.pageTo.val(1); caching.pageIndex.text(1); return true; }
if (i >= c) { caching.pageTo.val(c); caching.pageIndex.text(c); return true; }
return /\d/gim.test(i) && i > 0 && i < parseInt(caching.totalPages.text());
}
};
var behaviors = {
prevClick: function () {
methods.turnToPreviousPage();
},
nextClick: function () {
methods.turnToNextpage();
},
curChange: function () {
}
}; var getFrame = function (selector) {
return '.' + timestamp + ' ' + selector;
} $this.on('click', getFrame('.prev'), function (e) {
if (!methods.ensureFirstPage())
behaviors.prevClick();
});
$this.on('click', getFrame('.next'), function (e) {
if (!methods.ensureLastPage())
behaviors.nextClick();
});
$this.on('keydown blur', '.pageTo', function (e) {
var eType = $.inArray(e.type, ['focusout', 'keydown']);
if ((eType === 1 && e.keyCode === 13) || eType === 0) {
if (methods.ensureValidPageIndex()) {
var index = caching.pageTo.val();
methods.turnTopage(index);
}
}
}); methods.initPager(options);
return this;
}
})(jQuery);
效果:

写了个pager, 可供参考的更多相关文章
- Unity上一页下一页切换功能实现源码(仅供参考)
在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...
- mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https ...
- 【WPF】SnapsToDevicePixels与UseLayoutRounding二者到底有什么区别?供参考
原文:[WPF]SnapsToDevicePixels与UseLayoutRounding二者到底有什么区别?供参考 MSDN上解释了一大堆,二者对比来看,并不能发现什么明显的区别,微软爸爸也不知道多 ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- EF封装类 增加版,增加从缓存中查找数据方法,供参考!
EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...
- EF封装类,供参考!
以下是我对EF DB FIRST 生成的ObjectContext类进行封装,代码如下,供参考学习: using System; using System.Collections.Generic; u ...
- 为mutable类型的容器(array,set等)添加kvo,有点麻烦,供参考和了解下吧
http://blog.csdn.net/caryaliu/article/details/49284185 需要在被观察的属性所在的类里面实现一些方法,对开发者不友好,一般不建议使用,这里mark一 ...
- configure错误列表供参考
另外附一些常见的configure错误列表供参考: configure: error: No curses/termcap library found网上有的说法是:--with-named-curs ...
- Ubuntu 12.04 分区方案(仅供参考)
Ubuntu 12.04 分区方案(仅供参考) 总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...
随机推荐
- java 操作数据库
package foo;import java.sql.*; public class JdbcDemo { private static Connection conn; private stati ...
- nrf51822裸机教程-硬件timer
该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作 51822的Timer/Counter结构如下图所示 Timer模块从PCLK ...
- random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串
openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...
- FastMM、FastCode、FastMove的使用(图文并茂)
FastMM是一个替换Embarcadero Delphi Win32应用程序的快速内存管理器,以及可以在多线程下使用,不容易产生内存碎片,并且无需使用外部DLL文件就可以支持共享内存. 使用方法:1 ...
- 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告
实验内容 1.掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 这一部分是与我的partner合作的,详见他的博客- [20145326 <Java程序设计> ...
- 20145211 《Java程序设计》第九周学习总结——垂死病中惊坐起
教材学习内容总结 JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性 JDBC标准分为两个部分:J ...
- ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...
- magento安装新插件后后台配置空白解决办法
前段时间,安装完Magento插件以后,就会出现空白或者404问题,在某些运营中的magento网站,安装新插件后后台配置空白解决. 1 将sysytem->toos->Compilati ...
- iOS NSURLSession 下载
周五的时候,有个新的需求,要下载脚本,帮助玩家自动打怪,应该也是挂机的意思吧! 组长让我设计界面,让汤老师设计数据等.我觉得数据的挑战性更大一点,然后就接过来了. 自己还没有形成互联网思维,所以弄了一 ...
- asp.net mvc视图中嵌套分部视图
asp.net mvc中Layout相当于webForm中母版页,分部视图相当于webForm中的用户控件. 下面例子是一个视图如何嵌套分部视图: A是分部视图,B是一般视图(A,B中的代码省略) 我 ...