当前位置:首页 > VUE

vue实现卡片叠加滑动

2026-02-22 13:00:04VUE

Vue 实现卡片叠加滑动效果

实现卡片叠加滑动效果可以通过 CSS 结合 Vue 的动态数据绑定和过渡动画完成。以下是具体实现方法:

依赖准备 确保项目中已安装 Vue 及相关动画库(如 vue-transition 或直接使用原生 CSS 过渡)。

基本数据结构 在 Vue 的 data 中定义卡片数组和当前激活的卡片索引:

data() {
  return {
    cards: [
      { id: 1, title: 'Card 1' },
      { id: 2, title: 'Card 2' },
      { id: 3, title: 'Card 3' }
    ],
    activeIndex: 0
  }
}

模板结构 使用 v-for 渲染卡片,并通过 z-indextransform 控制叠加效果:

vue实现卡片叠加滑动

<div class="card-container">
  <div 
    v-for="(card, index) in cards"
    :key="card.id"
    class="card"
    :style="{
      zIndex: cards.length - index,
      transform: getCardTransform(index)
    }"
    @click="activateCard(index)"
  >
    {{ card.title }}
  </div>
</div>

样式设计 通过 CSS 实现叠加和滑动动画:

.card-container {
  position: relative;
  width: 300px;
  height: 200px;
  margin: 0 auto;
}

.card {
  position: absolute;
  width: 100%;
  height: 100%;
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  transition: transform 0.3s ease;
  cursor: pointer;
}

动态位置计算 在 Vue 方法中计算每张卡片的偏移量:

vue实现卡片叠加滑动

methods: {
  getCardTransform(index) {
    const offset = 20; // 叠加偏移量
    const activeOffset = index === this.activeIndex ? 0 : 10;
    return `translate(${index * offset}px, ${index * offset - activeOffset}px)`;
  },
  activateCard(index) {
    this.activeIndex = index;
  }
}

进阶交互 添加滑动动画和手势控制(需引入 hammerjs 等库):

import Hammer from 'hammerjs';

mounted() {
  const container = document.querySelector('.card-container');
  const hammer = new Hammer(container);
  hammer.on('swipeleft', () => {
    this.activeIndex = Math.min(this.activeIndex + 1, this.cards.length - 1);
  });
  hammer.on('swiperight', () => {
    this.activeIndex = Math.max(this.activeIndex - 1, 0);
  });
}

响应式调整 通过 Vue 的 computed 属性实现响应式布局:

computed: {
  visibleCards() {
    return this.cards.slice(
      Math.max(0, this.activeIndex - 2),
      this.activeIndex + 1
    ).reverse();
  }
}

最终效果

  • 卡片会以堆叠形式展示,最上层卡片完全可见
  • 点击或滑动时切换激活卡片
  • 非激活卡片自动下沉并偏移形成立体效果

通过调整 CSS 的 transform 属性和过渡时间,可以进一步优化动画流畅度。对于移动端,建议增加触摸事件处理以提高交互体验。

标签: 卡片vue
分享给朋友:

相关文章

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…