/*
* jquery分页插件spage
* by 凌晨四点半
* 20191229
* version:1.2.2
* https://github.com/jvbei/spage
*/
; (function ($, window, document, undefined) {
'use strict';
var defaults = {
page: 1,//当前页
pagesize: 10,//每页显示多少条
total: 0,//数据总条数
showtotal: false,//是否显示总条数
totaltxt: "共{total}条",//数据总条数文字描述
nodata: false,//没有数据时是否显示分页,默认false不显示,true显示第一页
showskip: false,//是否显示跳页
showpn: true,//是否显示上下翻页
prevpage: "上一页",//上翻页按钮文字
nextpage: "下一页",//下翻页按钮文字
fastforward: 0,//快进快退,默认0页
backfun: function (page) { }//点击分页按钮回调函数,返回当前页码
};
function plugin(element, options) {
this.element = $(element);
this.settings = $.extend({}, defaults, options);
this.pagenum = 1, //记录当前页码
this.pagelist = [], //页码集合
this.pagetatol = 0; //记录总页数
this.init();
}
$.extend(plugin.prototype, {
init: function () {
this.element.empty();
this.viewhtml();
},
creathtml: function (i) {
i == this.settings.page ? this.pagelist.push('')
: this.pagelist.push('');
},
viewhtml: function () {
var settings = this.settings;
var pagetatol = 0;
var pagearr = [];//分页元素集合,减少dom重绘次数
if (settings.total > 0) {
pagetatol = math.ceil(settings.total / settings.pagesize);
} else {
if (settings.nodata) {
pagetatol = 1;
settings.page = 1;
settings.total = 0;
} else {
return;
}
}
this.pagetatol = pagetatol;
this.pagenum = settings.page;
if (settings.showtotal) {
pagearr.push('
' + settings.totaltxt.replace(/\{(\w+)\}/gi, settings.total) + '
');
}
pagearr.push('');
this.pagelist = [];//页码元素集合,包括上下页
if (settings.showpn) {
settings.page == 1 ? this.pagelist.push('')
: this.pagelist.push('');
}
if (pagetatol <= 6) {
for (var i = 1; i < pagetatol + 1; i++) {
this.creathtml(i);
}
} else {
if (settings.page < 5) {
for (var i = 1; i <= 5; i++) {
this.creathtml(i);
}
this.pagelist.push('');
} else if (settings.page > pagetatol - 4) {
this.pagelist.push('');
for (var i = pagetatol - 4; i <= pagetatol; i++) {
this.creathtml(i);
}
} else {
this.pagelist.push('');
for (var i = settings.page - 2; i <= number(settings.page) + 2; i++) {
this.creathtml(i);
}
this.pagelist.push('');
}
}
if (settings.showpn) {
settings.page == pagetatol ? this.pagelist.push('')
: this.pagelist.push('');
}
pagearr.push(this.pagelist.join(''));
pagearr.push('
');
if (settings.showskip) {
pagearr.push('跳至 页
');
}
this.element.html(pagearr.join(''));
this.clickbtn();
},
clickbtn: function () {
var that = this;
var settings = this.settings;
var ele = this.element;
var pagetatol = this.pagetatol;
this.element.off("click", "button");
this.element.on("click", "button", function () {
var pagetext = $(this).data("page");
switch (pagetext) {
case "prev":
settings.page = settings.page - 1 >= 1 ? settings.page - 1 : 1;
pagetext = settings.page;
break;
case "next":
settings.page = number(settings.page) + 1 <= pagetatol ? number(settings.page) + 1 : pagetatol;
pagetext = settings.page;
break;
case "before":
settings.page = settings.page - settings.fastforward >= 1 ? settings.page - settings.fastforward : 1;
pagetext = settings.page;
break;
case "after":
settings.page = number(settings.page) + number(settings.fastforward) <= pagetatol ? number(settings.page) + number(settings.fastforward) : pagetatol;
pagetext = settings.page;
break;
case "go":
var p = parseint(ele.find("input").val());
if (/^[0-9]*$/.test(p) && p >= 1 && p <= pagetatol) {
settings.page = p;
pagetext = p;
} else {
return;
}
break;
default:
settings.page = pagetext;
}
// 点击或跳转当前页码不执行任何操作
if (pagetext == that.pagenum) {
return;
}
that.pagenum = settings.page;
that.viewhtml();
settings.backfun(pagetext);
});
this.element.off("keyup", "input");
this.element.on("keyup", "input", function (event) {
if (event.keycode == 13) {
var p = parseint(ele.find("input").val());
if (/^[0-9]*$/.test(p) && p >= 1 && p <= pagetatol && p != that.pagenum) {
settings.page = p;
that.pagenum = p;
that.viewhtml();
settings.backfun(p);
} else {
return;
}
}
});
if (settings.fastforward > 0) {
ele.find(".spage-after").hover(function () {
$(this).html("»");
}, function () {
$(this).html("...");
});
ele.find(".spage-before").hover(function () {
$(this).html("«");
}, function () {
$(this).html("...");
});
}
}
});
$.fn.spage = function (options) {
return this.each(function () {
new plugin(this, options);
});
}
})(jquery, window, document);