vue移动端H5网页上拉加载分页数据

本文详细介绍了在移动端页面实现触底加载的优化方法,包括监听页面滚动、延时加载策略、处理不同浏览器的兼容问题,以及如何根据当前页数和列表长度判断是否加载更多数据。特别提到了华为手机内置浏览器的特殊处理,通过减少计算次数提高性能。
摘要由CSDN通过智能技术生成

实现
首先要实时监听页面滚动,这里在mounted里给浏览器加入一个touchmove事件,给这个事件一个方法loading,方便调用它

首先我data里面的数据

data() {
    return {
      kwgArr: [],
      total: 0, //总数据量
      pageSize: 10, //每页10条数据
      current: 1, //当前页
      loadTxt: "",
    };
mounted() {
    window.addEventListener("touchmove", this.loading, true);
  },

离开页面的时候销毁

destroyed() {
    window.removeEventListener("touchmove", this.loading, true);
  },

在loading里首先获取到关键属性的值,对比高度即可。在触底时获取当前页数和当前列表数组的长度

ps:这里要使用个延时加载,不然滑动屏幕的时候会不断触发方法,去计算高度,浪费性能

loading() {
      let that = this;
      clearTimeout(that.timer);
      that.timer = setTimeout(() => {
        console.log("加载数据");
        let scrollTop =
          document.documentElement.scrollTop || document.body.scrollTop;
        let windowHeight =
          document.documentElement.clientHeight || document.body.clientHeight;
        let scrollHeight =
          document.documentElement.scrollHeight-100 || document.body.scrollHeight-100;
        //获取到关键属性的值后,判断即可
        if (scrollTop + windowHeight >= scrollHeight) {
          console.log("触底");
          // this.loadTxt = "玩命加载中~";
          //在触底时获取当前页数和当前列表数组的长度
          let page = this.current;
          let length = this.kwgArr.length;
          //对比当前列表长度和列表总数,如果相等,说明没有数据了,否则页数加一,再次调获取列表接口
          if (length == this.total) {
            this.loadTxt = "我也是有底线的~";
            // 我也是有底线的
          } else {
            page++;
            this.current = page;
            this.loadKnowledge();
          }
        }
      }, 50);
    },

这里获取列表接口需要一些操作,判断是第一次调接口还是触底调接口

    // 知识库主页分页
    loadKnowledge() {
      let param = {
        page: this.current,
        size: this.pageSize,
        // labelRef: labelId,
      };
      if (this.$route.query.labelId) {
        param["labelRef"] = this.$route.query.labelId;
      }
      if (this.title != null && this.title.trim() != "") {
        param["title"] = this.title;
      }
      this.$API.knowledgePage(param).then((data) => {
        var newList = [];
        if (this.current == 1) {
          newList = data.data;
        } else {
          newList = this.kwgArr.concat(data.data);
        }
        this.total = parseInt(data.total) || 0;
        this.kwgArr = newList;
      });
    },

在这里大家可以看到,为什么scrollHeight 要减100,这是针对华为手机自带的浏览器做的处理,因为如果不减100的话,对于华为手机自带的浏览器,窗口的高度 + 元素超出上边界的高度 永远不会大于元素高度,所以这里减掉100,这样就解决了这个问题,至于为什么华为手机自带的浏览器会有这个问题,我暂时也不清楚

 let scrollHeight = document.documentElement.scrollHeight-100 || document.body.scrollHeight-100;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值