js分页组件


class Pagination {
  constructor({ id, total, pageSize, changeCallBack }) {
    this.total = total || 1 // 数据总数
    this.pageSize = pageSize || 8 // 每页条数
    this.pageIndex = 1 // 当前页码
    this.pageNumber = Math.ceil(this.total / this.pageSize) // 总页码
    this.paginationEl = document.querySelector('#' + id)
    this.changeCallBack = changeCallBack
    this.init()
  }
  init() {
    this.renderPagination()
    this.bindEvent()
  }
  renderPagination() {
    this.paginationEl.innerHTML = ''
    let html = []
    html.push(this.createPrevBtn())
    html.push(this.createPageNumber())
    html.push(this.createNextBtn())
    let ul = document.createElement('ul')
    ul.className = 'pagination'
    ul.innerHTML = html.join(' ')
    this.paginationEl.appendChild(ul)
  }
  bindEvent() {
    this.bindPageNumberEvent()
    this.bindPrevBtnEvent()
    this.bindNextBtnEvent()
  }
  bindPageNumberEvent() {
    let painationList = this.paginationEl.querySelectorAll('.pagination_item')
    painationList.forEach(pagination => {
      pagination.addEventListener('click', (e) => {
        this.pageChange(Number(e.currentTarget.innerHTML))
      }, false)
    })
  }
  bindPrevBtnEvent() {
    let Prev = this.paginationEl.querySelector('.last_page')
    Prev.addEventListener('click', () => {
      if (this.pageIndex === 1) {
        return
      }
      this.pageChange(--this.pageIndex)
    }, false)
  }
  bindNextBtnEvent() {
    let Next = this.paginationEl.querySelector('.next_page')
    Next.addEventListener('click', () => {
      if (this.pageIndex === this.pageNumber) {
        return
      }
      this.pageChange(++this.pageIndex)
    }, false)
  }
  renderNumber(pageNumber,i) {
    if (this.pageIndex === i) {
      return `<li class="pagination_item active">${i}</li>`
    } else {
      return `<li class="pagination_item">${i}</li>`
    }
  }
  createPageNumber() {
    let pageNumber = ''
    // 总页码小于等于10的时候可以全部渲染,否则需要渲染省略号
    if(this.pageNumber <= 10){
      for (let i = 1; i <= this.pageNumber; i++) {
        pageNumber += this.renderNumber(pageNumber,i)
      }
    } else {
      if(this.pageIndex < 6 ){
        let i = 1
        while ( i < 6){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
        pageNumber += `<li class="pagination_item">...</li>`
        i = this.pageNumber - 3
        while ( i <= this.pageNumber){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
      }else if(this.pageIndex >= 6 && this.pageIndex < this.pageNumber - 4){
        let i = 1
        while ( i < 3){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
        pageNumber += `<li class="pagination_item">...</li>`
        i = this.pageIndex - 1
        while ( i <= this.pageIndex + 1){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
        pageNumber += `<li class="pagination_item">...</li>`
        i = this.pageNumber - 2
        while ( i <= this.pageNumber){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
      }else {
        let i = 1
        while ( i < 5){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
        pageNumber += `<li class="pagination_item">...</li>`
        i = this.pageNumber - 4
        while ( i <= this.pageNumber){
          pageNumber += this.renderNumber(pageNumber,i)
          i++
        }
      }
    }

    return pageNumber
  }
  createPrevBtn() {
    if (this.pageIndex === 1) {
      return `<li onclick="" class="last_page">
        <img src=翻页箭头的图片链接" alt="">
      </li>`
    } else {
      return `<li class="last_page">
        <img src="翻页箭头的图片链接" alt="">
      </li>`
    }
  }
  createNextBtn() {
    if (this.pageIndex === this.pageNumber) {
      return `<li class="next_page">
        <img src="翻页箭头的图片链接" alt="">
      </li>`
    } else {
      return `<li class="next_page">
        <img src="翻页箭头的图片链接" alt="">
      </li>`
    }
  }
  pageChange(pageIndex) {
    this.pageIndex = pageIndex
    this.init()
    if (typeof this.changeCallBack === 'function') {
      this.changeCallBack(this.pageIndex)
    }
  }
}

调用

<div id='pagination'></div>
  
  <script>
    new Pagination({
      id:'pagination',
      total:200,
      pageSize:8,
    })
  </script>

效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值