- function pager(parent, options) {
- var parent = typeof(parent) == 'string' ? $(parent) : parent;
- //默认配置项
- var source = {
- start : 5, //开始页码
- maxim : 4, //条以后出现省略...
- total : 18, //总页数
- parms : 'pager', //发送请求参数
- callback : function () {}
- };
- //默认页面属性与样式
- var pageOn = 'page-on',
- rPage = 'r-page';
- (function () {
- var _private = {
- //创建分页模版, 重复使用
- createhtml : function (index, sIndex) {
- var i = index || 1,
- //默认选中元素[1-4]
- seleIndex = sIndex || 1;
- //分组
- count = 1;
- var codeTemp = '<a href="javascript:;" class="gradientF prev-btn"><</a>{@num}<a href="javascript:;" class="gradientF next-btn">></a>';
- var codeList = '';
- var sign = '<span>...</span>';
- var total = source['total'],
- maxim = source['maxim'];
- //开始位置[i变量起点1开始所以maxim要减去1]
- if (i > (maxim - 1))
- codeList += '<a href="javascript:;" class="gradientF first-btn">' + count + '</a>' + sign;
- //结束排序
- if (i == total)
- i = total - (maxim - count);
- //如果小于最多显示条目自动补全
- if (i < maxim)
- i = 1;
- for (; i <= total; i++) {
- if (count <= maxim) {
- //主页码区域
- codeList += '<a href="javascript:;" class="gradientF event-one ' + (seleIndex == count ? "page-on" : "") + '" r-page="' + count + '">' + i + '</a>';
- } else {
- break;
- }
- count++;
- }
- //结束位置[i变量起点1开始所以要减去1]
- if ((i - 1) != total)
- codeList += sign + '<a href="javascript:;" class="gradientF last-btn">' + total + '</a>';
- return codeTemp.replace(/{@num}/, codeList);
- },
- //当前触发
- one : function () {
- var eventOne = parent.find('.event-one');
- eventOne.off().on('click', function () {
- var self = $(this);
- var code = '';
- var pageNum = _private.getPageNum(self, rPage);
- //当前实际页码
- var number = parseInt(self.text(), 10);
- self.siblings('.' + pageOn).removeClass(pageOn);
- self.addClass(pageOn);
- var lastBtn = parent.find('.last-btn');
- if (number == source['total']) {
- //尾页模拟触发
- lastBtn.click();
- return;
- }
- if (pageNum == source['maxim']) {
- code = _private.createHtml(number, 1);
- _private.viewToPage(code);
- }
- });
- },
- //上一页
- prev : function () {
- var prevBtn = parent.find('.prev-btn');
- prevBtn.off().on('click', function () {
- var self = $(this);
- var code = '';
- var selectNode = parent.find('.' + pageOn);
- var pageNum = _private.getPageNum(selectNode, rPage);
- //当前实际页码
- var number = parseInt(selectNode.text(), 10);
- if (pageNum != 1) {
- selectNode.prev().siblings('.' + pageOn).removeClass(pageOn);
- selectNode.prev().addClass(pageOn);
- } else {
- if (number - 1 < source['maxim']) {
- code = _private.createHtml(1, number - 1);
- } else {
- code = _private.createHtml(number - 1, 1);
- }
- _private.viewToPage(code);
- }
- });
- },
- //下一页
- next : function () {
- var nextBtn = parent.find('.next-btn');
- nextBtn.off().on('click', function () {
- var self = $(this);
- var selectNode = parent.find('.' + pageOn);
- var pageNum = _private.getPageNum(selectNode, rPage);
- //当前实际页码
- var number = parseInt(selectNode.text(), 10);
- var code = "";
- var lastBtn = parent.find('.last-btn');
- if (number == source['total']) {
- lastBtn.click();
- return;
- }
- if (pageNum == source['maxim']) {
- code = _private.createHtml(number + 1, 1);
- _private.viewToPage(code);
- } else {
- selectNode.next().siblings('.' + pageOn).removeClass(pageOn);
- selectNode.next().addClass(pageOn);
- }
- });
- },
- //首页
- first : function () {
- var lastBtn = parent.find('.first-btn');
- var code = _private.createHtml(1, 1);
- lastBtn.off().on('click', function () {
- _private.viewToPage(code);
- });
- },
- //尾页
- last : function () {
- var lastBtn = parent.find('.last-btn');
- var code = _private.createHtml(source['total'], source['maxim']);
- lastBtn.off().on('click', function () {
- _private.viewToPage(code);
- });
- },
- //获取页码值
- getPageNum : function (that, cAttr) {
- var val = that.attr(cAttr);
- return parseInt(val, 10);
- },
- //显示到页面
- viewToPage : function (code, callback) {
- var _callback = typeof(callback) == 'function' ? callback : function () {};
- parent.html(code);
- //初始化所有事件
- _private.first();
- _private.last();
- _private.prev();
- _private.next();
- _private.one();
- },
- //关系映射序列[规则]
- oRm : function (num) {
- var total = source['total'],
- maxim = source['maxim'];
- var oRms = {};
- for (var i = 1; i < total; i += (maxim - 1)) {
- splitGroup(i, oRms);
- }
- function splitGroup(index, obj) {
- var arr = [];
- var val = index;
- var over = maxim;
- for (var i = 0; i < over; i++) {
- arr.push(val++);
- }
- obj[index] = arr;
- }
- function sequence() {
- var page = '';
- for (var n in oRms) {
- //直接返回分组并跳页
- if (n == num) {
- page = num + '/1';
- break;
- }
- //查询子分组对应关系
- for (var c = 0; c < oRms[n].length; c++) {
- if (num == oRms[n][c]) {
- page = n + '/' + ((parseInt(num, 10) + 1) - n);
- break;
- }
- }
- }
- return page;
- }
- return sequence();
- }
- };
- return {
- run : function () {
- if (options)
- source = $.extend(source, options);
- //_private.viewToPage(_private.createHtml(source['start']));
- var oRms = _private.oRm(source['start']).split('/');
- var start = oRms[0],
- over = oRms[1];
- _private.viewToPage(_private.createHtml(start, over));
- parent.click(function () {
- //当前实际页码
- var number = parseInt(parent.find('.' + pageOn).text(), 10);
- source['callback'](source['parms'] == '' ? number : source['parms'] + '=' + number);
- });
- }
- }
- }().run());
- }
- //该片段来自于http://www.codesnippet.cn/detail/2801201511674.html
来源: http://www.codesnippet.cn/detail/2801201511674.html