jquery.page.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /*
  2. *page plugin 1.0 2016-09-29 by cary
  3. */
  4. (function ($) {
  5. //默认参数
  6. var defaults = {
  7. totalPages: 9,//总页数
  8. liNums: 9,//分页的数字按钮数(建议取奇数)
  9. activeClass: 'active' ,//active类
  10. firstPage: '首页',//首页按钮名称
  11. lastPage: '末页',//末页按钮名称
  12. prv: '«',//前一页按钮名称
  13. next: '»',//后一页按钮名称
  14. hasFirstPage: true,//是否有首页按钮
  15. hasLastPage: true,//是否有末页按钮
  16. hasPrv: true,//是否有前一页按钮
  17. hasNext: true,//是否有后一页按钮
  18. callBack : function(page){
  19. //回掉,page选中页数
  20. }
  21. };
  22. //插件名称
  23. $.fn.Page = function (options) {
  24. //覆盖默认参数
  25. var opts = $.extend(defaults, options);
  26. //主函数
  27. return this.each(function () {
  28. var obj = $(this);
  29. var l = opts.totalPages;
  30. var n = opts.liNums;
  31. var active = opts.activeClass;
  32. var str = '';
  33. var str1 = '<li><a href="javascript:" class="'+ active +'">1</a></li>';
  34. if (l > 1&&l < n+1) {
  35. for (i = 2; i < l + 1; i++) {
  36. str += '<li><a href="javascript:">' + i + '</a></li>';
  37. }
  38. }else if(l > n){
  39. for (i = 2; i < n + 1; i++) {
  40. str += '<li><a href="javascript:">' + i + '</a></li>';
  41. }
  42. }
  43. var dataHtml = '';
  44. if(opts.hasNext){
  45. dataHtml += '<div class="next fr">' + opts.next + '</div>';
  46. }
  47. if(opts.hasLastPage){
  48. dataHtml += '<div class="last fr">' + opts.lastPage + '</div>';
  49. }
  50. dataHtml += '<ul class="pagingUl">' + str1 + str + '</ul>';
  51. if(opts.hasFirstPage){
  52. dataHtml += '<div class="first fr">' + opts.firstPage + '</div>';
  53. }
  54. if(opts.hasPrv){
  55. dataHtml += '<div class="prv fr">' + opts.prv + '</div>';
  56. }
  57. obj.html(dataHtml).off("click");//防止插件重复调用时,重复绑定事件
  58. obj.on('click', '.next', function () {
  59. var pageshow = parseInt($('.' + active).html());
  60. var nums,flag;
  61. var a = n % 2;
  62. if(a == 0){
  63. //偶数
  64. nums = n;
  65. flag = true;
  66. }else if(a == 1){
  67. //奇数
  68. nums = (n+1);
  69. flag = false;
  70. }
  71. if(pageshow >= l) {
  72. return;
  73. }else if(pageshow > 0&&pageshow <= nums/2){
  74. //最前几项
  75. $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
  76. }else if((pageshow > l-nums/2&&pageshow < l&&flag==false)||(pageshow > l-nums/2-1&&pageshow < l&&flag==true)){
  77. //最后几项
  78. $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
  79. }else{
  80. $('.' + active).removeClass(active).parent().next().find('a').addClass(active);
  81. fpageShow(pageshow+1);
  82. }
  83. opts.callBack(pageshow+1);
  84. });
  85. obj.on('click', '.prv', function () {
  86. var pageshow = parseInt($('.' + active).html());
  87. var nums = odevity(n);
  88. if (pageshow <= 1) {
  89. return;
  90. }else if((pageshow > 1&&pageshow <= nums/2)||(pageshow > l-nums/2&&pageshow < l+1)){
  91. //最前几项或最后几项
  92. $('.' + active).removeClass(active).parent().prev().find('a').addClass(active);
  93. }else {
  94. $('.' + active).removeClass(active).parent().prev().find('a').addClass(active);
  95. fpageShow(pageshow-1);
  96. }
  97. opts.callBack(pageshow-1);
  98. });
  99. obj.on('click', '.first', function(){
  100. var activepage = parseInt($('.' + active).html());
  101. if (activepage <= 1){
  102. return
  103. }//当前第一页
  104. opts.callBack(1);
  105. fpagePrv(0);
  106. });
  107. obj.on('click', '.last', function(){
  108. var activepage = parseInt($('.' + active).html());
  109. if (activepage >= l){
  110. return;
  111. }//当前最后一页
  112. opts.callBack(l);
  113. if(l>n){
  114. fpageNext(n-1);
  115. }else{
  116. fpageNext(l-1);
  117. }
  118. });
  119. obj.on('click', 'li', function(){
  120. var $this = $(this);
  121. var pageshow = parseInt($this.find('a').html());
  122. var nums = odevity(n);
  123. opts.callBack(pageshow);
  124. if(l>n){
  125. if(pageshow > l-nums/2&&pageshow < l+1){
  126. //最后几项
  127. fpageNext((n-1)-(l-pageshow));
  128. }else if(pageshow > 0&&pageshow < nums/2){
  129. //最前几项
  130. fpagePrv(pageshow-1);
  131. }else{
  132. fpageShow(pageshow);
  133. }
  134. }else{
  135. $('.' + active).removeClass(active);
  136. $this.find('a').addClass(active);
  137. }
  138. });
  139. //重新渲染结构
  140. /*activePage 当前项*/
  141. function fpageShow(activePage){
  142. var nums = odevity(n);
  143. var pageStart = activePage - (nums/2-1);
  144. var str1 = '';
  145. for(i=0;i<n;i++){
  146. str1 += '<li><a href="javascript:" class="">' + (pageStart+i) + '</a></li>'
  147. }
  148. obj.find('ul').html(str1);
  149. obj.find('ul li').eq(nums/2-1).find('a').addClass(active);
  150. }
  151. /*index 选中项索引*/
  152. function fpagePrv(index){
  153. var str1 = '';
  154. if(l>n-1){
  155. for(i=0;i<n;i++){
  156. str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
  157. }
  158. }else{
  159. for(i=0;i<l;i++){
  160. str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
  161. }
  162. }
  163. obj.find('ul').html(str1);
  164. obj.find('ul li').eq(index).find('a').addClass(active);
  165. }
  166. /*index 选中项索引*/
  167. function fpageNext(index){
  168. var str1 = '';
  169. if(l>n-1){
  170. for(i=l-(n-1);i<l+1;i++){
  171. str1 += '<li><a href="javascript:" class="">' + i + '</a></li>'
  172. }
  173. obj.find('ul').html(str1);
  174. obj.find('ul li').eq(index).find('a').addClass(active);
  175. }else{
  176. for(i=0;i<l;i++){
  177. str1 += '<li><a href="javascript:" class="">' + (i+1) + '</a></li>'
  178. }
  179. obj.find('ul').html(str1);
  180. obj.find('ul li').eq(index).find('a').addClass(active);
  181. }
  182. }
  183. //判断liNums的奇偶性
  184. function odevity(n){
  185. var a = n % 2;
  186. if(a == 0){
  187. //偶数
  188. return n;
  189. }else if(a == 1){
  190. //奇数
  191. return (n+1);
  192. }
  193. }
  194. });
  195. }
  196. })(jQuery);