jquery.page.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. (function($) {
  2. function pageNav(start, end) {
  3. var html = '';
  4. for (var i = start; i <= end; ++i) {
  5. html += '<span class="' + pre + '-btn">' + i + '</span>';
  6. }
  7. $('.' + pre + '-nav').html(html);
  8. $('.' + pre + '-nav span:contains(' + page + ')').removeClass(pre + '-btn').addClass(pre + '-curr');
  9. $('.' + pre + '-first').removeClass(pre + '-none').addClass(pre + '-btn');
  10. $('.' + pre + '-prev').removeClass(pre + '-none').addClass(pre + '-btn');
  11. $('.' + pre + '-next').removeClass(pre + '-none').addClass(pre + '-btn');
  12. $('.' + pre + '-last').removeClass(pre + '-none').addClass(pre + '-btn');
  13. if (page <= 1) {
  14. $('.' + pre + '-first').removeClass(pre + '-btn').addClass(pre + '-none');
  15. $('.' + pre + '-prev').removeClass(pre + '-btn').addClass(pre + '-none');
  16. }
  17. if (page >= maxPage) {
  18. $('.' + pre + '-next').removeClass(pre + '-btn').addClass(pre + '-none');
  19. $('.' + pre + '-last').removeClass(pre + '-btn').addClass(pre + '-none');
  20. }
  21. }
  22. function pageGroup() {
  23. var mid = Math.floor(num / 2);
  24. if (num <= mid || page <= mid || num === maxPage) {
  25. pageNav(1, num);
  26. } else if (page > maxPage - mid) {
  27. pageNav(maxPage - num + 1, maxPage);
  28. } else {
  29. pageNav(num % 2 > 0 ? page - mid : page - mid + 1, page + mid);
  30. }
  31. }
  32. var defaults = {
  33. total: 0,
  34. size: 0,
  35. num: 5,
  36. prefix: 'pagelist'
  37. };
  38. var page = 1; // 当前页码值
  39. var size = 0; // 每页显示条数
  40. var total = 0; // 总记录数
  41. var num = 0; // 每页显示的导航链接数
  42. var maxPage = 0; // 最大页数
  43. var pre = ''; // class前缀
  44. $.fn.page = function(options) {
  45. var obj = this;
  46. options = $.extend({}, defaults, options);
  47. size = options.size;
  48. total = options.total;
  49. pre = options.prefix;
  50. maxPage = Math.ceil(total / size), num = Math.min(options.num, maxPage);
  51. pageNav(1, num);
  52. // 分页按钮触发
  53. this.on('click', '.' + pre + '-btn', function() {
  54. if ($(this).hasClass(pre + '-first')) {
  55. page = 1;
  56. } else if ($(this).hasClass(pre + '-prev')) {
  57. --page;
  58. } else if ($(this).hasClass(pre + '-next')) {
  59. ++page;
  60. } else if ($(this).hasClass(pre + '-last')) {
  61. page = maxPage;
  62. } else {
  63. page = parseInt($(this).text());
  64. }
  65. pageGroup();
  66. });
  67. return {
  68. click: function(callback) {
  69. obj.on('click', '.' + pre + '-btn', function() {
  70. callback(page);
  71. });
  72. }
  73. };
  74. };
  75. $.fn.page.defaults = defaults;
  76. })(jQuery);