节流下拉加载更多

methods:{
// 触底加载更多
    handleScroll() {
      let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      let clientHeight = document.documentElement.clientHeight;
      let scrollHeight = document.documentElement.scrollHeight;
      if (scrollTop + clientHeight >= scrollHeight) { // 如果滚动到接近底部,自动加载下一页
            //事件处理
            this.getMore()
      }    
    },
}
mounted() {
    // body背景颜色
    // document
    //   .querySelector("body")
    //   .setAttribute("style", "background-color:#ebebeb");
      // 触底加载更多
       window.addEventListener("scroll", this.handleScroll);
    this.getData()
  },
  beforeDestroy() {
    //document.querySelector("body").removeAttribute("style");
    window.removeEventListener("scroll", this.handleScroll,false);
  },



pc的mounted和beforeDestroy的写法 不然跳转其他页面也会加载
mounted() {
       window.addEventListener('scroll', this.handleScroll,true)
    
  },
  beforeDestroy() {
    //document.querySelector("body").removeAttribute("style");
    window.removeEventListener('scroll', this.handleScroll, true)
  },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uniapp中,可以使用debounce和throttle两种方式来实现上拉加载更多的防抖和节流。 1. 防抖 防抖是指在一段时间内只执行一次函数,常用于防止频繁触发函数。在上拉加载更多的场景中,可以使用防抖来避免用户快速滑动页面时频繁加载数据。 示例代码: ```javascript // 防抖函数 function debounce(fn, delay) { let timer = null; return function() { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, arguments); }, delay); } } // 上拉加载更多 export default { data() { return { list: [], page: 1, limit: 10, isLoading: false } }, methods: { // 加载数据 loadData() { // 避免重复加载 if (this.isLoading) return; this.isLoading = true; // 请求数据 api.getList(this.page, this.limit).then(res => { this.list = this.list.concat(res.data); this.page++; this.isLoading = false; }); }, // 监听滚动事件 onScroll() { const scrollTop = uni.getSystemInfoSync().scrollTop; const windowHeight = uni.getSystemInfoSync().windowHeight; const scrollHeight = uni.getSystemInfoSync().scrollHeight; // 判断是否滑到底部 if (scrollTop + windowHeight >= scrollHeight) { this.loadData = debounce(this.loadData, 500); this.loadData(); } } } } ``` 在上面的代码中,我们使用了debounce函数来包装loadData函数,设置了500ms的延迟时间,避免用户快速滑动页面时频繁加载数据。 2. 节流 节流是指在一段时间内只执行一次函数,常用于优化频繁触发函数的性能。在上拉加载更多的场景中,可以使用节流来控制数据的加载频率,避免服务器压力过大。 示例代码: ```javascript // 节流函数 function throttle(fn, delay) { let timer = null; return function() { if (!timer) { timer = setTimeout(() => { fn.apply(this, arguments); timer = null; }, delay); } } } // 上拉加载更多 export default { data() { return { list: [], page: 1, limit: 10, isLoading: false } }, methods: { // 加载数据 loadData() { // 避免重复加载 if (this.isLoading) return; this.isLoading = true; // 请求数据 api.getList(this.page, this.limit).then(res => { this.list = this.list.concat(res.data); this.page++; this.isLoading = false; }); }, // 监听滚动事件 onScroll() { const scrollTop = uni.getSystemInfoSync().scrollTop; const windowHeight = uni.getSystemInfoSync().windowHeight; const scrollHeight = uni.getSystemInfoSync().scrollHeight; // 判断是否滑到底部 if (scrollTop + windowHeight >= scrollHeight) { this.loadData = throttle(this.loadData, 500); this.loadData(); } } } } ``` 在上面的代码中,我们使用了throttle函数来包装loadData函数,设置了500ms的间隔时间,确保每500ms只加载一次数据,避免服务器压力过大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值