下拉加载更多

throlle()封装一个节流的方法

为什么要分装一个节流的方法呢?

是为了防止触底事件持续触发,使用节流的话,就可以规定在 n 秒内触发一次,可以降低计算的频率,
 

     // 自己封装一个节流的函数, 这是一个闭包

     throlle(fn, delay) {

      // fn 是被回调的函数,delay 是讲个的时间 1000=1 秒

          const that = this;

         let time = +new Date(); //当前触发的时间,也是被存储的开始的触发时间

          return function () {

          // 用当前运行中的时间减去开始记录的时间,如果值大于 delay,说明已经达到时间间隔

              if (+new Date() - time >= delay) {

               fn.apply(that, arguments); //call 和 apply 都是可以自动执行的函数

                // 要把记录的时间重新赋值

                time = +new Date();

            }

         };

     },

附增:闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的(大白话:访问函数内部变量的函数就是闭包)。

(想要了解更多请看本人其他文章)

 loadnext() 滚动到底部加载下一屏数据

如何监听页面的滚动距离:页面的总高度=页面的可是区域的高+当前页面的滚动距离

document.documentElement.scrollHeight=
document.documentElement.clientHeight+document.documentElement.scrollTop

在 methods 中定义一个方法 loadnext(),在当前页面数据加载完之后调用

1.首先进行页面滚动距离的监听,进行判断,当总页面的高度小于页面的可是区域的高+当前页面的滚动距离,进行下一步

2,获取接口的总条数对当前页面的页数进行比较,当前的页数大于总条数除以每页显示的条数时,就说明没有更多的数据。如果没有,就让当前页面的页数++

3.调用数据的时候记得对后端的接口进行一个检测

4.更新页面额数据,当当前页面的页数改变是重新将数据更新可采用拓展运算符的方式
 

  loadnext() {

      let win = document.documentElement;

      //throlle() 这个是分装的一个节流的方法,用到的是闭包,

      window.onscroll = this.throlle(() => {

        if (win.scrollHeight - 200 <= win.clientHeight + win.scrollTop) {

            //page第几页 number每页多少条 totals接口返回数据里面的总条数

          if (this.page >= Math.ceil(this.totals / this.number)) {

            return this.$toast("没有更多数据了!");

          }

          this.page++;

          getProductList(this.page, this.number).then((res) => {

            // 注意,永远不要相信后端接口

           if (res.data.code !== 1) return this.$toast("请求数据失败!");

            this.list = [...this.list, ...res.data.result.list];

          });

        }

      }, 1000);

    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值