vue无限滚动实现

vue无限滚动实现

1.首先挂载一个监听滚动条滚动的方法

  mounted () {
    // 添加滚动条滚动的监听事件
    window.addEventListener('scroll', this.scroll, false)
  },
  beforeDestroy () {
    // 删除滚动条滚动的监听事件
    window.removeEventListener('scroll', this.scroll, false)
  }

2.我们在方法区里编写一个监听滚动条滚动的方法

在滚动方法中我们计算滚动条到底部的距离,当距离小于100px时就调用getHotProduct 获取数据

methods: {
   // 获取热销商品
   getHotProduct () {
     // 当前是否正在加载,如果是正在加载就取消加载数据
     if (this.loading) {
       this.page--
       return
     }
     if (this.productList.length >= this.totalCount) return
     // 赋值表示正在加载
     this.loading = true
     getHots({
       limit: this.limit,
       page: this.page
     }).then(({ data }) => {
       if (data.code === 0) {
         this.totalCount = data.page.totalCount
         this.totalPage = data.page.totalPage
         this.productList = this.productList.concat(data.page.list)
       }
       // 表示加载完成
       this.loading = false
     }).catch((res) => {
       console.log(res)
     })
   },
   scroll () {
     window.onscroll = () => {
       // 整个页面的高度
       const scrollHeight = document.body.scrollHeight
       // 当前可视区的顶部到页面顶部的高度,||是做兼容处理的
       const scrollTop = document.body.scrollTop || document.documentElement.scrollTop
       // 当前可视区的高度
       const clientHeight = document.documentElement.clientHeight
       // 可视区底部到页面底部的高度,即滚动条与底部的距离
       const instance = scrollHeight - scrollTop - clientHeight
       // 当滚动条与底部的距离小于100时就触发加载数据
       if (instance < 100) {
         this.page++
         this.getHotProduct()
       }
     }
   }
 }

在这里附上一张图,让你更容易理解页面是如何触发方法获取数据的:
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值