当前位置:首页 > VUE

vue 实现下拉刷新

2026-01-21 18:45:49VUE

Vue 实现下拉刷新的方法

使用第三方库(如vue-pull-refresh)

安装vue-pull-refresh库:

npm install vue-pull-refresh --save

在组件中引入并使用:

import VuePullRefresh from 'vue-pull-refresh'

export default {
  components: {
    VuePullRefresh
  },
  methods: {
    onRefresh() {
      // 刷新数据逻辑
      setTimeout(() => {
        this.$refs.pullRefresh.forceUpdate()
      }, 1000)
    }
  }
}

模板部分:

<vue-pull-refresh ref="pullRefresh" @refresh="onRefresh">
  <!-- 内容区域 -->
</vue-pull-refresh>

原生实现方案

监听touch事件实现下拉刷新:

data() {
  return {
    startY: 0,
    distance: 0,
    isLoading: false
  }
},
methods: {
  touchStart(e) {
    this.startY = e.touches[0].pageY
  },
  touchMove(e) {
    const touchY = e.touches[0].pageY
    this.distance = touchY - this.startY

    if (this.distance > 0 && window.scrollY <= 0) {
      e.preventDefault()
    }
  },
  touchEnd() {
    if (this.distance > 100 && !this.isLoading) {
      this.isLoading = true
      this.refreshData()
    }
    this.distance = 0
  },
  refreshData() {
    // 数据刷新逻辑
    setTimeout(() => {
      this.isLoading = false
    }, 1000)
  }
}

模板部分:

<div 
  @touchstart="touchStart"
  @touchmove="touchMove"
  @touchend="touchEnd"
>
  <div class="refresh-container" :style="{ transform: `translateY(${distance}px)` }">
    <div v-if="isLoading">加载中...</div>
    <!-- 内容区域 -->
  </div>
</div>

使用better-scroll库

安装better-scroll:

npm install better-scroll --save

实现代码:

import BScroll from 'better-scroll'

export default {
  mounted() {
    this.initScroll()
  },
  methods: {
    initScroll() {
      this.scroll = new BScroll(this.$refs.wrapper, {
        pullDownRefresh: {
          threshold: 50,
          stop: 20
        },
        click: true
      })

      this.scroll.on('pullingDown', () => {
        this.refreshData()
      })
    },
    refreshData() {
      // 异步获取数据
      setTimeout(() => {
        this.scroll.finishPullDown()
        this.scroll.refresh()
      }, 1000)
    }
  }
}

模板部分:

<div ref="wrapper" class="wrapper">
  <div class="content">
    <!-- 下拉刷新提示 -->
    <div class="pull-down-refresh">下拉刷新</div>
    <!-- 内容区域 -->
  </div>
</div>

样式处理

为原生实现添加基本样式:

.refresh-container {
  transition: transform 0.3s;
}
.pull-down-refresh {
  text-align: center;
  padding: 10px 0;
}

为better-scroll添加样式:

vue 实现下拉刷新

.wrapper {
  height: 100vh;
  overflow: hidden;
}

以上方法可根据项目需求选择合适方案,第三方库实现更简单快捷,原生实现更灵活可控。

标签: vue
分享给朋友:

相关文章

vue实现分支

vue实现分支

Vue 实现分支的方法 在 Vue 项目中实现分支功能通常涉及条件渲染、动态组件或路由控制。以下是几种常见的实现方式: 条件渲染(v-if/v-show) 使用 Vue 的指令根据条件显示不同内容:…

vue实现选区创建

vue实现选区创建

Vue 实现选区创建的方法 在 Vue 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ran…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue实现swipe

vue实现swipe

Vue实现Swipe功能的方法 使用第三方库(推荐) Vue生态中有多个成熟的轮播/滑动组件库,例如vue-awesome-swiper或swiper/vue。以下是基于swiper/vue的实现示例…

vue实现gps

vue实现gps

Vue 中实现 GPS 定位功能 在 Vue 中实现 GPS 定位功能通常依赖于浏览器的 Geolocation API 或第三方地图服务(如高德、百度地图等)。以下是两种常见的实现方式: 使用浏览…