/* * 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}页",//数据总条数文字描述 showCurNum: "当前第{cur}页",//数据总条数文字描述 noData: false,//没有数据时是否显示分页,默认false不显示,true显示第一页 showChange:false, 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, this.pageTatol) + '
'); } if (settings.showCurNum) { pageArr.push('
当前 '+ settings.page +'/'+ this.pageTatol+ '页
'); } 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.showChange) { var html = '
跳至 
'; pageArr.push(html); } 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.off("change", "select"); 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.on("change","select",function(){ var pageText = $(this).data("page"); var p = parseInt(ele.find("select").val()); if (/^[0-9]*$/.test(p) && p >= 1 && p <= pageTatol) { settings.page = p; pageText = p; } else { return; } 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);