当前位置:首页 > VUE

vue实现刷卡

2026-02-10 11:10:58VUE

Vue 实现刷卡效果

实现刷卡效果通常涉及动画和交互设计,以下是一个基于 Vue 的实现方案:

安装依赖 确保项目中已安装 vuevue-router(如需页面切换效果)。若需复杂动画,可引入 animate.cssgsap

基础动画实现 通过 Vue 的过渡系统结合 CSS 实现滑动效果:

vue实现刷卡

<template>
  <div class="swipe-container">
    <transition name="swipe">
      <div v-if="showCard" class="card" @touchstart="startSwipe" @touchmove="moveSwipe" @touchend="endSwipe">
        <!-- 卡片内容 -->
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showCard: true,
      startX: 0,
      moveX: 0
    }
  },
  methods: {
    startSwipe(e) {
      this.startX = e.touches[0].clientX
    },
    moveSwipe(e) {
      this.moveX = e.touches[0].clientX - this.startX
      e.currentTarget.style.transform = `translateX(${this.moveX}px)`
    },
    endSwipe() {
      if (Math.abs(this.moveX) > 100) {
        this.showCard = false
        // 可在此处触发后续逻辑
      } else {
        this.$refs.card.style.transform = 'translateX(0)'
      }
    }
  }
}
</script>

<style>
.swipe-enter-active, .swipe-leave-active {
  transition: all 0.5s ease;
}
.swipe-enter, .swipe-leave-to {
  transform: translateX(100%);
  opacity: 0;
}
.card {
  width: 300px;
  height: 200px;
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
</style>

进阶手势控制 对于更精细的手势控制,可引入 hammer.jsinteract.js

import Hammer from 'hammerjs'

mounted() {
  const hammer = new Hammer(this.$refs.card)
  hammer.on('swipe', (event) => {
    if (event.direction === Hammer.DIRECTION_RIGHT) {
      // 右滑逻辑
    } else if (event.direction === Hammer.DIRECTION_LEFT) {
      // 左滑逻辑
    }
  })
}

组件化实现 封装为可复用组件:

vue实现刷卡

<!-- SwipeCard.vue -->
<template>
  <div class="swipe-card" ref="card" :style="cardStyle">
    <slot></slot>
  </div>
</template>

<script>
export default {
  props: {
    threshold: { type: Number, default: 100 }
  },
  data() {
    return {
      deltaX: 0,
      isSwiping: false
    }
  },
  computed: {
    cardStyle() {
      return {
        transform: `translateX(${this.deltaX}px)`,
        transition: this.isSwiping ? 'none' : 'transform 0.3s ease'
      }
    }
  },
  methods: {
    handleSwipe(direction) {
      this.$emit('swipe', direction)
    }
  },
  mounted() {
    // 添加手势事件监听
  }
}
</script>

注意事项

  1. 移动端需考虑 touch 事件,PC 端需兼容 mouse 事件
  2. 性能优化:使用 transform 而非 left/top 属性
  3. 可结合 Vuex 管理卡片状态
  4. 复杂场景建议使用现成轮子如 vue-swipe-actions 等组件库

扩展功能

  • 添加弹性动画效果
  • 实现堆叠卡片(tinder 式)
  • 集成 API 数据加载
  • 添加撤销功能

以上方案可根据实际需求调整动画细节和交互逻辑。

标签: vue
分享给朋友:

相关文章

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mind…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 EC…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实现…