当前位置:首页 > 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中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…

vue滑块实现

vue滑块实现

Vue滑块实现方法 使用原生HTML5 range input Vue中可以绑定原生HTML5的range类型input元素实现基础滑块功能: <template> <div&…