vue手机端,纯前端实现滚动懒加载,分页加载数据

最近做的一个项目,后端的接口由于某种的原因,一次性把所有的列表数据全部返回给前端了。所以需要前端做个滚动懒加载的功能,并把数据做个拦截处理。效果如下图所示:
在这里插入图片描述
在这里插入图片描述
因为我的框架用得是:http://mint-ui.github.io/docs/#/zh-cn2/infinite-scroll

html部分

 <div
   class="progress_list"
   v-infinite-scroll="loadMore"
   infinite-scroll-disabled="loading"
   infinite-scroll-distance="10"
 >
   <div class="progress_item" v-for="(item, index) in list" :key="index">
     <div class="progress_title">{{item.projectName}}</div>
     <div class="progress_box">
       <div class="progress_bar">
         <div class="progress_value">{{`${item.currVal}%`}}</div>
         <div class="progress_line" :style="{left: item.totalVal + '%'}"></div>
       </div>
       <div class="progress_text" v-if="item.status === '进度落后'">
         <img src="@/assets/images/icon_down.png" alt />
         <span style="color:#FF371F;">{{item.status}}</span>
       </div>
       <div class="progress_text" v-if="item.status === '进度刚好'">
         <img src="@/assets/images/icon_right.png" alt />
         <span style="color:#2D6EFB;">{{item.status}}</span>
       </div>
       <div class="progress_text" v-if="item.status === '进度超前'">
         <img src="@/assets/images/icon_up.png" alt />
         <span style="color:#38C8B5;">{{item.status}}</span>
       </div>
     </div>
   </div>
   <div class="progress_loading" v-if="loading">加载中...</div>
   <div class="progress_loading" v-if="noMore">无更多数据</div>
 </div>

data() {
  return { 
    page: 1, //当前页数
    pageSize: 10, //每页10条
    loading: false,
    noMore: false, 
    list: [], //列表展示数据 
  };
},
mounted() {
  this.setList();
},
methods: {
  // 滚动加载
  loadMore() { 
    this.noMore = false;
    if (this.list.length === this.demandData.items.length) {
      this.noMore = true;
      return false;
    }
    this.loading = true;
    setTimeout(() => {
      this.page++;
      this.setList();
      this.loading = false;
    }, 1000);
  },
  // 计算滚动加载的数据
  setList() {
    let begin = (this.page - 1) * this.pageSize;
    let end = this.page * this.pageSize;
    let data = [];
    data = [...this.list, ...this.demandData.items.slice(begin, end)];
    this.list = data;
  },
}

这样,一个简单的手机端滚动加载列表数据就完成了。前端把返回的数据利用slice切割出来,这样浏览器就不用一次性渲染太多的dom结构,能提升用户体验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值