当前位置:首页 > VUE

vue实现下啦刷新

2026-01-20 23:37:35VUE

Vue 实现下拉刷新

使用第三方库(推荐)

安装 vue-pull-refresh 库:

npm install vue-pull-refresh --save

在组件中引入并使用:

vue实现下啦刷新

<template>
  <pull-refresh :on-refresh="onRefresh">
    <div class="content">
      <!-- 列表内容 -->
    </div>
  </pull-refresh>
</template>

<script>
import PullRefresh from 'vue-pull-refresh';

export default {
  components: {
    PullRefresh
  },
  methods: {
    onRefresh() {
      return new Promise((resolve) => {
        setTimeout(() => {
          // 刷新数据逻辑
          resolve();
        }, 1000);
      });
    }
  }
}
</script>

原生实现

通过监听 touch 事件和滚动事件实现:

vue实现下啦刷新

<template>
  <div 
    class="pull-refresh"
    @touchstart="touchStart"
    @touchmove="touchMove"
    @touchend="touchEnd"
  >
    <div class="refresh-tip" :style="{ transform: `translateY(${moveY}px)` }">
      {{ refreshText }}
    </div>
    <div class="content">
      <!-- 列表内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      startY: 0,
      moveY: 0,
      refreshing: false,
      refreshText: '下拉刷新'
    }
  },
  methods: {
    touchStart(e) {
      this.startY = e.touches[0].pageY;
    },
    touchMove(e) {
      const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      if (scrollTop > 0) return;

      const moveY = e.touches[0].pageY - this.startY;
      if (moveY > 0) {
        this.moveY = moveY;
        if (moveY > 50) {
          this.refreshText = '释放刷新';
        } else {
          this.refreshText = '下拉刷新';
        }
      }
    },
    touchEnd() {
      if (this.moveY > 50) {
        this.refreshing = true;
        this.refreshText = '刷新中...';
        this.refreshData();
      } else {
        this.moveY = 0;
      }
    },
    refreshData() {
      // 刷新数据逻辑
      setTimeout(() => {
        this.refreshing = false;
        this.moveY = 0;
        this.refreshText = '下拉刷新';
      }, 1000);
    }
  }
}
</script>

<style>
.pull-refresh {
  position: relative;
  overflow: hidden;
}
.refresh-tip {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 50px;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.3s;
}
</style>

结合 Better-Scroll 实现

安装 Better-Scroll:

npm install better-scroll --save

实现代码:

<template>
  <div class="wrapper" ref="wrapper">
    <div class="content">
      <div class="refresh-tip">{{ refreshText }}</div>
      <!-- 列表内容 -->
    </div>
  </div>
</template>

<script>
import BScroll from 'better-scroll';

export default {
  data() {
    return {
      scroll: null,
      refreshText: '下拉刷新'
    }
  },
  mounted() {
    this.initScroll();
  },
  methods: {
    initScroll() {
      this.scroll = new BScroll(this.$refs.wrapper, {
        pullDownRefresh: {
          threshold: 50,
          stop: 20
        },
        click: true
      });

      this.scroll.on('pullingDown', () => {
        this.refreshText = '刷新中...';
        this.refreshData();
      });
    },
    refreshData() {
      setTimeout(() => {
        // 刷新数据逻辑
        this.refreshText = '下拉刷新';
        this.scroll.finishPullDown();
        this.scroll.refresh();
      }, 1000);
    }
  }
}
</script>

<style>
.wrapper {
  height: 100vh;
  overflow: hidden;
}
.refresh-tip {
  height: 50px;
  line-height: 50px;
  text-align: center;
}
</style>

注意事项

  • 移动端实现需考虑 touch 事件
  • 下拉距离阈值通常设为 50px 左右
  • 刷新完成后需要重置状态
  • 列表数据更新后需要重新计算滚动区域高度(Better-Scroll 需调用 refresh())
  • 性能优化:避免频繁触发事件,可使用节流函数

标签: vue
分享给朋友:

相关文章

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…