当前位置:首页 > 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事件实现下拉刷新:

vue 实现下拉刷新

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

实现代码:

vue 实现下拉刷新

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添加样式:

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

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

标签: vue
分享给朋友:

相关文章

vue实现多个tab

vue实现多个tab

Vue 实现多个 Tab 的方法 使用动态组件切换 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现多个…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

vue实现iframe

vue实现iframe

Vue 中实现 iframe 的方法 在 Vue 项目中,可以通过多种方式实现 iframe 的嵌入。以下是几种常见的方法: 使用原生 HTML iframe 标签 直接在 Vue 组件的模板中使用…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.defineProperty…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…