page.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. function Paging(options) {
  2. let defaultValue = {
  3. total: 0,
  4. current: 1,
  5. firstText: '首页',
  6. prevText: '上一页',
  7. nextText: '下一页',
  8. lastText: '尾页',
  9. PageSize: 10,
  10. PageNum: 5,
  11. container: document.getElementsByClassName('paging')[0]
  12. }
  13. this.options = Object.assign({}, defaultValue, options);
  14. this.show();
  15. this.PageClick()
  16. }
  17. Paging.prototype.show = function () {
  18. let disable = "";
  19. let PageTotalNum = this.getPageTotalNum();
  20. this.options.container.innerHTML = "";
  21. if(this.options.current === 1){
  22. disable = 'disable'
  23. }
  24. this.createElement('first ' + disable, this.options.firstText);
  25. this.createElement('prev ' + disable, this.options.prevText);
  26. this.createNumElement();
  27. disable = ""
  28. if(this.options.current === PageTotalNum){
  29. disable = 'disable'
  30. }
  31. this.createElement('next ' + disable, this.options.nextText);
  32. this.createElement('last ' + disable, this.options.lastText);
  33. let span = document.createElement('span');
  34. let i = `<i>${this.options.current}</i> /<i>${PageTotalNum}</i>`;
  35. span.innerHTML = i;
  36. this.options.container.appendChild(span)
  37. }
  38. Paging.prototype.createNumElement = function() {
  39. let min = this.options.current - Math.floor(this.options.PageNum / 2);
  40. if(min < 1) {
  41. min = 1;
  42. }
  43. let max = min + this.options.PageNum - 1;
  44. let PageTotalNum = this.getPageTotalNum();
  45. if (max > PageTotalNum){
  46. max = PageTotalNum;
  47. }
  48. let active = "";
  49. for(let i = min; i <= max; i ++) {
  50. if(this.options.current === i) {
  51. active = 'active';
  52. }else{
  53. active = '';
  54. }
  55. this.createElement('pagingDiv ' + active, i);
  56. }
  57. }
  58. Paging.prototype.createElement = function(specialStyle, content) {
  59. let oDiv = document.createElement('div');
  60. oDiv.className = specialStyle;
  61. oDiv.innerText = content;
  62. this.options.container.appendChild(oDiv);
  63. }
  64. Paging.prototype.getPageTotalNum = function() {
  65. return Math.ceil(this.options.total / this.options.PageSize)
  66. }
  67. Paging.prototype.PageClick = function() {
  68. let _this = this;
  69. let PageTotalNum = this.getPageTotalNum();
  70. this.options.container.addEventListener('click', function(e) {
  71. if(e.target.classList.contains('first')){
  72. _this.toPage(1);
  73. } else if (e.target.classList.contains('prev')) {
  74. _this.toPage(_this.options.current - 1);
  75. } else if (e.target.classList.contains('next')) {
  76. _this.toPage(_this.options.current + 1);
  77. } else if (e.target.classList.contains('last')) {
  78. _this.toPage(PageTotalNum);
  79. } else if(e.target.classList.contains('pagingDiv')){
  80. _this.toPage(+e.target.innerText);
  81. }
  82. })
  83. }
  84. Paging.prototype.toPage = function (page){
  85. let PageTotalNum = this.getPageTotalNum();
  86. if(page < 1) {
  87. page = 1;
  88. }
  89. if(page > PageTotalNum){
  90. page = PageTotalNum;
  91. }
  92. this.options.current = page;
  93. this.options.pageChange && this.options.pageChange(page);
  94. this.show()
  95. }