vant-ui实现下拉刷新和上拉加载

1. 引入vant

npm i vant -S

2. 源码

<template>
 
  <div>
 
    <van-pull-refresh v-model="isLoading" @refresh="onRefresh">
 
      <van-list v-model="isUpLoading" :finished="upFinished" @load="onLoad"
 
        :offset="offset" finished-text="我也是有底线的~~~"
 
      >
 
        <div class="content">
 
          <!-- 自定义内容 -->
 
          <ul>
 
            <li v-for="(item, index) in datacontent" :key="index">
 
              <div class="left">
 
                <p class="rank">{{item.rank}}</p>
 
                <p class="score">
 
                  分数:
 
                  <br />
 
                  <span>{{item.score}}</span>
 
                </p>
 
                <p class="title">{{item.title}}</p>
 
                <p class="classify">{{item.classify}}</p>
 
                <p class="author">{{item.author}}</p>
 
                <p class="date">{{item.date}}</p>
 
              </div>
 
            </li>
 
          </ul>
 
        </div>
 
      </van-list>
 
    </van-pull-refresh>
 
  </div>
 
</template>
 
<script>
 
export default {
 
  data() {
 
    return {
 
      data: [  ], //自己定义的数组,里面存放数据,用于v-for循环
 
      datacontent: [], //空数组,用来储存循环出来的内容,因为没有造假数据,所以就反复循环这个数组里的内容了,懒~~~嘻嘻
 
      isLoading: false, //下拉刷新
 
      isUpLoading: false, //上拉加载
 
      upFinished: false, //上拉加载完毕
 
      finished: false,
 
      offset: 100 //滚动条与底部距离小于 offset 时触发load事件
 
    };
 
  },
 
  mounted() {
 
    for (var i = 0; i < 2; i++) {
 
      this.datacontent.push(this.data[i]); //页面一加载我就循环出来五条放进去
 
    }
 
  },
 
  methods: {
 
    // 下拉调用此函数
 
    onRefresh() {
 
      setTimeout(() => {
 
        this.$toast("刷新成功"); //弹出
 
        this.isLoading = false;
 
      }, 500);
 
    },
 
    // 上拉调用此函数
 
    onLoad() {
 
      setTimeout(() => {
 
        this.$toast("加载成功"); //弹出
 
        this.isUpLoading = false;
 
        for (var i = 0; i < 1; i++) {
 
          this.datacontent.push(this.data[i]); // 上拉时循环出来这个数组的三条内容,放入datacontent这个数组里,那样就一直拉一直加
 
        }
 
      }, 500);
 
      // 加载完成时底部提示加载完成,禁止上拉加载。延迟器是为了避免和加载中同时执行
 
      setTimeout(() => {
 
        if (this.datacontent.length >= 10) {
 
          this.upFinished = true;
 
        } else {
 
          this.upFinished = false;
 
        }
 
      }, 1000);
 
    }
 
  }
 
};
</script>
<style lang="less" scoped>
  .van-pull-refresh{
    .left {
      overflow: hidden;
      p {
      width: 30px;
      float: left;
    }
    }
  }
</style>
 
 
 
 

3. 简化版

<template>
  <div class="information">
    <van-pull-refresh v-model="isLoading" @refresh="onRefresh">
      <van-list
        v-model="isUpLoading"
        :finished="upFinished"
        @load="onLoad"
        :offset="offset"
        :finished-text="textBottom"
      >
       //内容
      </van-list>
    </van-pull-refresh>
  </div>
</template>
 
<script>
import { Toast } from "vant";
 
export default {
  data() {
    return {
      companyList: [],
      isLoading: false, //下拉刷新
      isUpLoading: false, //上拉加载
      upFinished: false, //上拉加载完毕
      finished: false,
      offset: 100, //滚动条与底部距离小于 offset 时触发load事件
      pages: 0,
      textBottom: "" //底部内容文字
    };
  },
  mounted() {
    this.compactInfo();
  },
  methods: {
    // 下拉调用此函数
    onRefresh() {
      setTimeout(() => {
        // this.$toast("刷新成功"); //弹出
        this.isLoading = false;
      }, 500);
    },
    // 上拉调用此函数
    onLoad() {
      setTimeout(() => {
        this.isUpLoading = false;
        this.compactInfo();
      }, 500);
    },
   //加载的数据
    compactInfo() {
      this.pages++;
      this.$axios
        .get("接口地址")
        .then(res => {
          if (res.data.status == "200") {
            let lists = res.data.body.records;
            if (lists.length == "0") {
              this.upFinished = true;
            } else {
              this.upFinished = false;
            }
            for (var i = 0; i < lists.length; i++) {
              this.companyList.push(lists[i]); // 上拉时循环出来这个数组的三条内容,放入datacontent这个数组里,那样就一直拉一直加
            }
            if (this.companyList.length > 7) {
              this.textBottom = "我也是有底线的~~~";
            }
          } else {
            Toast({
              message: res.data.title,
              position: "center",
              duration: 1000
            });
          }
        });
    },
    
  }
};
</script>
 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vant-ui是一款基于Vue.js的移动端UI组件库,提供了丰富的组件和功能。其中,上刷新是vant-ui中的一个常用组件,用于在移动端页面实现加载更多数据的功能。 使用vant-ui的上刷新组件,你需要按照以下步骤进行操作: 1. 安装vant-ui:在你的Vue项目中,通过npm或yarn安装vant-ui库。 2. 引入vant-ui:在需要使用上刷新组件的页面中,引入vant-ui库。 3. 使用上刷新组件:在页面中使用`van-pull-refresh`组件,并绑定相应的事件和数据。 下面是一个简单的示例代码,演示了如何在Vue项目中使用vant-ui的上刷新组件: ```vue <template> <div> <van-pull-refresh v-model="isLoading" @refresh="onRefresh"> <ul> <li v-for="item in list" :key="item.id">{{ item.name }}</li> </ul> </van-pull-refresh> </div> </template> <script> import { PullRefresh } from 'vant'; export default { components: { [PullRefresh.name]: PullRefresh, }, data() { return { isLoading: false, list: [], }; }, methods: { onRefresh() { // 模拟异步请求数据 setTimeout(() => { // 请求成功后更新数据 this.list = [...this.list, ...newData]; // 关闭上刷新状态 this.isLoading = false; }, 1000); }, }, }; </script> ``` 在上述示例中,`van-pull-refresh`组件用于包裹需要进行上刷新的内容,通过`v-model`绑定`isLoading`属性来控制上刷新的状态。当用户触发刷新事件时,会调用`onRefresh`方法进行数据请求,并在请求成功后更新数据和关闭上刷新状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值