antdv的table组件不分页的情况下,要求展示很大数据量,又有标签页切换的需求

我之前的文章有写到这个问题,这篇文章再次优化一下,思维转换一下可能更加简单
问题: antdv的table组件不分页,要求展示上万条数据,还需要切换标签页,造成卡顿
解决办法: 找到table组件,绑定事件:

document.querySelector('#test table').addEventListener('scroll',() => {
	this.handleScroll('#test table', 'data', 'datascroll', 'count')
}) // 给dom元素绑定scroll

写handleScroll函数:参数分别为dom元素的class或id,需要渲染的总数据,table组件展示的数据,上滑下滑到哪了第几次计数分别计数

    handleScroll (idvalue, data, datascroll, count) {
      this.scrollTop = document.querySelector(idvalue).scrollTop
      this.offsetHeight = document.querySelector(idvalue).offsetHeight
      this.scrollHeight = document.querySelector(idvalue).scrollHeight
      /// 不足20条数据,就都展示了就好
      if (this[data].length < this.numberMix) {
        this[datascroll] = this[data]
        // 滑到顶部也是给个提示
        if (this.scrollTop === 0) {
          this.$message.warn('您已经滑到顶部了')
        }
        // 滑到底部还是给个提示
        if ((this.scrollTop + this.offsetHeight) >= this.scrollHeight) {
          this.$message.warn('没有更多数据了')
        }
        return
      }
      // 滑到顶部scrollTop为0
      if (this.scrollTop === 0) {
        this.selectedRowKeys = []
        // 计数变为1,即如果是1就代表滑到顶部了,取0-numberMax条数在可视区域
        if (this[count] <= 0) {
          this[count] = 1
        }
        if (this[count] === 1) {
          this[datascroll] = this[data].slice(0, this.numberMax)
          this.$message.warn('您已经滑到顶部了')
        } else {
          // 如果不是在顶部
          document.querySelector(idvalue).scrollTo(0, 10)
          this[datascroll] = this[data].slice(((this[count] - 2) * this.scrollnum), ((this[count] - 2) * this.scrollnum + this.numberMax))
          this[count]--
        }
      }
      // 滑到底部
      if ((this.scrollTop + this.offsetHeight) >= this.scrollHeight) {
        this.selectedRowKeys = []
        // 是否是最后一次了
        if ((this[count] * this.scrollnum + this.numberMax) >= this[data].length) {
          this[datascroll] = this[data].slice((this[data].length - this.numberMax), this[data].length)
          this.$message.warn('没有更多数据了')
          return
        }
        document.querySelector(idvalue).scrollTo(0, 100)
        this[datascroll] = this[data].slice((this[count] * this.scrollnum), (this[count] * this.scrollnum + this.numberMax))
        this[count]++
      }
    }

小结:
0-20
4-24
8-28
12-32

附加数据说明:

      scrollTop: 0, // 滚动条滚动高度
      scrollHeight: 0, // 滚动条总高度
      offsetHeight: 0, // 可视窗口高度
      numberMax: 20, // 可视区域加载多少条
      scrollnum: 4, // 每一次上滑或下滑滑出多少条
      numberMix: 20, // 小于多少条就直接展示,不再走下滑计算的流程

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值