vue2 实现滚动条scroll 数据懒加载

在Vue2项目中,遇到滚动到底部多次调用接口的问题,通过使用函数节流throttle优化,确保在一定时间内只执行一次请求。文章介绍了函数防抖和节流的区别,并展示了如何结合Vue2的$nextTick与addEventListener来实现滚动事件的节流处理,从而避免资源浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做滚动条数据懒加载的时候,我遇到了一触底然后就多次调用接口的情况,随后了解到了函数防抖函数节流这两个概念,这里我们需要使用到函数节流这个东西,在一定时间内只执行一次请求
函数防抖一般是用在事件上,比如:查询团队名是否重复,那你需要等待用户输入完团队名才能查询,不然就是浪费请求资源,函数节流也是同理。
所以:vue2+addEventListener+throttle(函数防抖)
this.$nextTick在下次DOM更新循环结束之后执行延迟回调

this.$nextTick(() => {
		// 这个this.reDraw 我也不知道是啥
      this.reDraw = this.throttle(this.historicalMessagesHandleScroll, 500, 1000)
      // 在data上定义的参数这里就不贴上去了
      this.scrollElement = document.getElementById('historicalMessages')
      // 绑定滚动事件
      this.scrollElement.addEventListener('scroll',this.reDraw , true)
    })
// 简单的节流函数
    throttle(func, wait, mustRun) {
      let timeout,
        startTime = new Date()

      return function() {
        let context = this,
          args = arguments,
          curTime = new Date()

        clearTimeout(timeout)
        // 如果达到了规定的触发时间间隔,触发 handler
        if (curTime - startTime >= mustRun) {
          func.apply(context, args)
          startTime = curTime
          // 没达到触发间隔,重新设定定时器
        } else {
          timeout = setTimeout(func, wait)
        }
      }
    }
historicalMessagesHandleScroll(e) {
     //  滚动的像素+容器的高度>可滚动的总高度-100像素
      if (e.srcElement.scrollTop + e.srcElement.offsetHeight >= e.srcElement.scrollHeight) {
        // TODO 数据加载...
        dosomething...
      }
    }

这里你注意document.getElementById的时候是要找你的容器比如div这种把你的内容包裹起来的这种dom,不然浏览器会报错找不到addEventListener这个方法
this.reDraw有大佬知道这个的可以在评论区指出,这里就是做个记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值