当前位置:首页 > VUE

vue 实现卡片拖动

2026-01-08 05:07:55VUE

Vue 实现卡片拖动的几种方法

使用 Vue 实现卡片拖动可以通过多种方式实现,以下是几种常见的方法:

vue 实现卡片拖动

使用 HTML5 原生拖放 API

HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动功能。

vue 实现卡片拖动

<template>
  <div
    v-for="(card, index) in cards"
    :key="index"
    class="card"
    draggable="true"
    @dragstart="handleDragStart($event, index)"
    @dragover.prevent
    @drop="handleDrop($event, index)"
  >
    {{ card.text }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      cards: [
        { text: 'Card 1' },
        { text: 'Card 2' },
        { text: 'Card 3' }
      ],
      draggedIndex: null
    };
  },
  methods: {
    handleDragStart(event, index) {
      this.draggedIndex = index;
      event.dataTransfer.setData('text/plain', index);
    },
    handleDrop(event, index) {
      const fromIndex = this.draggedIndex;
      const toIndex = index;
      if (fromIndex !== toIndex) {
        const card = this.cards[fromIndex];
        this.cards.splice(fromIndex, 1);
        this.cards.splice(toIndex, 0, card);
      }
    }
  }
};
</script>

<style>
.card {
  padding: 10px;
  margin: 5px;
  border: 1px solid #ccc;
  background: #f9f9f9;
  cursor: move;
}
</style>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 组件,提供了更简单的拖放实现。

<template>
  <draggable v-model="cards" group="cards" @start="drag=true" @end="drag=false">
    <div v-for="(card, index) in cards" :key="index" class="card">
      {{ card.text }}
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: {
    draggable
  },
  data() {
    return {
      cards: [
        { text: 'Card 1' },
        { text: 'Card 2' },
        { text: 'Card 3' }
      ]
    };
  }
};
</script>

<style>
.card {
  padding: 10px;
  margin: 5px;
  border: 1px solid #ccc;
  background: #f9f9f9;
  cursor: move;
}
</style>

使用鼠标事件实现自定义拖动

通过监听鼠标事件,可以实现更灵活的拖动效果。

<template>
  <div
    v-for="(card, index) in cards"
    :key="index"
    class="card"
    @mousedown="startDrag($event, index)"
    @mousemove="dragCard($event, index)"
    @mouseup="stopDrag"
    :style="{
      position: 'relative',
      left: card.dragging ? card.dragX + 'px' : '0',
      top: card.dragging ? card.dragY + 'px' : '0'
    }"
  >
    {{ card.text }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      cards: [
        { text: 'Card 1', dragging: false, dragX: 0, dragY: 0 },
        { text: 'Card 2', dragging: false, dragX: 0, dragY: 0 },
        { text: 'Card 3', dragging: false, dragX: 0, dragY: 0 }
      ],
      dragStartX: 0,
      dragStartY: 0
    };
  },
  methods: {
    startDrag(event, index) {
      this.cards[index].dragging = true;
      this.dragStartX = event.clientX - this.cards[index].dragX;
      this.dragStartY = event.clientY - this.cards[index].dragY;
    },
    dragCard(event, index) {
      if (this.cards[index].dragging) {
        this.cards[index].dragX = event.clientX - this.dragStartX;
        this.cards[index].dragY = event.clientY - this.dragStartY;
      }
    },
    stopDrag() {
      this.cards.forEach(card => {
        card.dragging = false;
      });
    }
  }
};
</script>

<style>
.card {
  padding: 10px;
  margin: 5px;
  border: 1px solid #ccc;
  background: #f9f9f9;
  cursor: move;
}
</style>

注意事项

  • 使用 HTML5 原生拖放 API 时,注意 dragover 事件需要调用 preventDefault 以允许放置。
  • Vue.Draggable 提供了丰富的配置选项,如动画、限制拖动方向等,可以参考其文档。
  • 自定义拖动实现时,注意处理鼠标事件的位置计算,确保拖动效果流畅。

以上方法可以根据具体需求选择适合的实现方式。

标签: 拖动卡片
分享给朋友:

相关文章

vue实现拖动图片验证

vue实现拖动图片验证

实现拖动图片验证的思路 拖动图片验证是一种常见的验证码形式,用户需要将图片拖动到指定位置完成验证。在Vue中实现这一功能需要结合HTML5的拖放API和Vue的数据绑定特性。 核心实现步骤 HTML…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…

vue实现弹出卡片

vue实现弹出卡片

Vue 实现弹出卡片的方法 使用 v-if 或 v-show 控制显示 通过 Vue 的指令 v-if 或 v-show 可以控制弹出卡片的显示和隐藏。v-if 会动态添加或移除 DOM 元素,而 v…

vue实现拖动图片验证

vue实现拖动图片验证

Vue 实现拖动图片验证功能 核心思路 拖动图片验证通常需要用户将图片拖动到指定区域或按正确顺序排列。实现时需要处理拖拽事件、验证逻辑和视觉反馈。 实现步骤 1. 基础组件结构 <tem…

vue 实现拖动

vue 实现拖动

实现拖动的核心方法 在Vue中实现拖动功能可以通过HTML5的拖放API或第三方库如vuedraggable。以下是两种常见方案的实现细节。 使用HTML5原生拖放API HTML5提供了dragg…

vue拖动实现

vue拖动实现

Vue 拖动实现方法 在 Vue 中实现拖动功能可以通过多种方式完成,以下介绍几种常见的方法: 使用 HTML5 拖放 API HTML5 提供了原生的拖放 API,可以直接在 Vue 中使用。通过…