当前位置:首页 > VUE

vue实现探探卡片

2026-01-17 03:10:22VUE

Vue 实现探探卡片效果

探探卡片的交互效果主要包括卡片堆叠、左右滑动、缩放和旋转动画。以下是基于 Vue 3 的实现方法:

核心组件结构

使用 v-for 渲染卡片列表,通过 CSS 绝对定位实现堆叠效果:

<template>
  <div class="cards-container">
    <div 
      v-for="(card, index) in cards" 
      :key="card.id"
      :style="getCardStyle(index)"
      @touchstart="startDrag"
      @touchmove="onDrag"
      @touchend="endDrag"
      class="card"
    >
      <!-- 卡片内容 -->
    </div>
  </div>
</template>

卡片样式与堆叠

通过 CSS 实现基础卡片样式和层叠效果:

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

.card {
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 10px;
  background-size: cover;
  box-shadow: 0 2px 10px rgba(0,0,0,0.1);
  transition: transform 0.3s ease;
}

拖拽交互逻辑

实现触摸事件处理函数,计算拖拽偏移量:

setup() {
  const cards = ref([...]);
  const startX = ref(0);
  const currentX = ref(0);
  const isDragging = ref(false);
  const currentCardIndex = ref(0);

  const startDrag = (e) => {
    startX.value = e.touches[0].clientX;
    isDragging.value = true;
  };

  const onDrag = (e) => {
    if (!isDragging.value) return;
    currentX.value = e.touches[0].clientX - startX.value;
    // 更新卡片位置
  };

  const endDrag = () => {
    if (Math.abs(currentX.value) > 100) {
      // 判断左滑或右滑
      removeCard();
    } else {
      // 回弹动画
      resetCardPosition();
    }
    isDragging.value = false;
  };

  return { cards, startDrag, onDrag, endDrag };
}

动画效果实现

动态计算卡片变换样式:

const getCardStyle = (index) => {
  const scale = 1 - index * 0.05;
  const yOffset = index * 10;
  let rotate = 0;

  if (index === 0 && isDragging.value) {
    rotate = currentX.value * 0.1;
  }

  return {
    transform: `
      translateY(${yOffset}px)
      scale(${scale})
      rotate(${rotate}deg)
      translateX(${index === 0 ? currentX.value : 0}px)
    `,
    zIndex: cards.value.length - index
  };
};

卡片移除与新增

实现滑动后的卡片移除逻辑:

const removeCard = () => {
  cards.value.shift();
  currentCardIndex.value++;
  currentX.value = 0;

  // 可以在这里添加新卡片
  if (cards.value.length < 3) {
    addNewCard();
  }
};

const addNewCard = () => {
  cards.value.push({
    id: generateId(),
    // 新卡片数据
  });
};

优化建议

  1. 使用 CSS will-change 属性优化动画性能:

    .card {
      will-change: transform;
    }
  2. 添加滑动阈值判断,当滑动距离超过一定值时自动完成动画

  3. 实现卡片飞出的抛物线动画效果

  4. 添加双击点赞等附加交互功能

完整实现需要考虑移动端和桌面端的兼容性,建议使用 @vueuse/gesture 等手势库简化交互逻辑处理。

vue实现探探卡片

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

相关文章

vue实现预览

vue实现预览

Vue实现文件预览的方法 使用Vue实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、视频等)。以下是几种常见文件类型的实现方案。 图片预览 通过<input type…

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为f…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return {…