当前位置:首页 > 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 控制叠加效果:

<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 方法中计算每张卡片的偏移量:

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实现签名

实现Vue签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 ya…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Obje…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…