当前位置:首页 > VUE

vue下拉刷新实现

2026-02-11 09:08:51VUE

vue下拉刷新实现

使用第三方库(推荐)

安装vue-pull-refresh库:

npm install vue-pull-refresh --save

在组件中引入并使用:

vue下拉刷新实现

import VuePullRefresh from 'vue-pull-refresh'

export default {
  components: {
    VuePullRefresh
  },
  methods: {
    onRefresh() {
      // 模拟异步加载
      setTimeout(() => {
        // 获取新数据后调用complete方法
        this.$refs.pullRefresh.complete()
      }, 1000)
    }
  }
}

模板中使用:

<vue-pull-refresh ref="pullRefresh" @refresh="onRefresh">
  <!-- 内容区域 -->
  <div v-for="item in list" :key="item.id">{{ item.text }}</div>
</vue-pull-refresh>

原生实现方案

监听touch事件实现基础下拉效果:

vue下拉刷新实现

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

      // 只有向下滑动且页面在顶部时才触发
      if (this.distance > 0 && window.scrollY <= 0) {
        e.preventDefault()
        // 可以在这里添加下拉动画效果
      }
    },
    touchEnd() {
      if (this.distance > 50) {  // 下拉距离阈值
        this.loading = true
        this.loadData()
      }
      this.distance = 0
    },
    loadData() {
      // 数据加载逻辑
      setTimeout(() => {
        this.loading = false
      }, 1000)
    }
  }
}

结合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.fetchData().then(() => {
          this.scroll.finishPullDown()
          this.scroll.refresh()
        })
      })
    },
    fetchData() {
      // 返回Promise的数据获取方法
    }
  }
}

注意事项

  • 移动端需要添加touch事件阻止默认行为
  • 下拉阈值建议设置在50-70px之间
  • 加载完成后需要重置状态
  • 列表数据更新后可能需要手动刷新滚动容器
  • 在SPA中需要注意keep-alive组件的缓存问题

以上方案可根据项目需求选择,第三方库方案开发效率最高,原生方案定制性最强,better-scroll方案在复杂滚动场景下表现更好。

标签: vue
分享给朋友:

相关文章

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…

前端vue实现概率

前端vue实现概率

Vue实现概率功能的方法 在Vue中实现概率功能通常涉及随机数生成和概率计算。以下是几种常见实现方式: 基础概率实现 使用Math.random()生成0到1之间的随机数,与设定概率比较:…

vue列表查询实现

vue列表查询实现

实现 Vue 列表查询功能 基础列表渲染 在 Vue 中可以通过 v-for 指令实现列表渲染,结合计算属性动态过滤数据: <template> <div> &l…