/* * 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);