当前位置:首页 > VUE

vue 实现卡片拖拽

2026-03-08 00:39:01VUE

实现卡片拖拽的基本思路

在Vue中实现卡片拖拽功能通常结合HTML5的拖放API或第三方库如vuedraggable。以下是两种常见方法的详细说明:

使用HTML5原生拖放API

HTML5提供了draggable属性及相关事件(dragstartdragenddragoverdrop等),通过监听这些事件实现拖拽逻辑。

<template>
  <div 
    class="card" 
    draggable="true"
    @dragstart="handleDragStart($event, index)"
    @dragover.prevent
    @drop="handleDrop($event, index)"
  >
    {{ card.content }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      cards: [
        { id: 1, content: 'Card 1' },
        { id: 2, content: 'Card 2' }
      ]
    };
  },
  methods: {
    handleDragStart(e, index) {
      e.dataTransfer.setData('text/plain', index);
    },
    handleDrop(e, targetIndex) {
      const sourceIndex = e.dataTransfer.getData('text/plain');
      const [movedCard] = this.cards.splice(sourceIndex, 1);
      this.cards.splice(targetIndex, 0, movedCard);
    }
  }
};
</script>

<style>
.card {
  padding: 10px;
  margin: 5px;
  background: #f0f0f0;
  cursor: move;
}
</style>

关键点:

  • 设置draggable="true"启用拖拽。
  • @dragover.prevent阻止默认行为以允许放置。
  • 通过dataTransfer传递拖拽项的索引,完成数据交换。

使用vuedraggable

vuedraggable是基于Sortable.js的Vue组件,简化了列表拖拽的实现。

安装依赖:

npm install vuedraggable

示例代码:

<template>
  <draggable 
    v-model="cards" 
    group="cards" 
    @end="onDragEnd"
  >
    <div v-for="card in cards" :key="card.id" class="card">
      {{ card.content }}
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';
export default {
  components: { draggable },
  data() {
    return {
      cards: [
        { id: 1, content: 'Card 1' },
        { id: 2, content: 'Card 2' }
      ]
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成后的顺序:', this.cards);
    }
  }
};
</script>

<style>
.card {
  padding: 10px;
  margin: 5px;
  background: #f0f0f0;
}
</style>

优势:

  • 内置动画和跨列表拖拽支持。
  • 通过v-model直接绑定数据,无需手动处理DOM操作。

性能优化建议

对于大量卡片场景,为拖拽项添加key属性避免不必要的渲染。若使用原生API,可通过requestAnimationFrame优化拖拽过程中的视觉反馈。

vue 实现卡片拖拽

<div v-for="card in cards" :key="card.id" class="card">
  {{ card.content }}
</div>

跨框架兼容性

若需兼容旧版浏览器,可通过polyfill(如Sortable.js)或回退到鼠标事件模拟拖拽。vuedraggable已内置兼容处理。

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

相关文章

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 dragg…

vue拖拽实现方式

vue拖拽实现方式

Vue 拖拽实现方式 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件(如 dragstart、dragend、dragover、…

vue拖拽容器实现

vue拖拽容器实现

Vue 拖拽容器实现方法 在 Vue 中实现拖拽容器功能可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来实现。以下是两种方法的详细说明。 使用 HTML5 拖放…

jquery 拖拽

jquery 拖拽

jQuery 拖拽实现方法 使用 jQuery 实现拖拽功能可以通过多种方式完成,以下是常见的几种方法: 使用 jQuery UI 的拖拽功能 jQuery UI 提供了 draggable 方法,…

vue能实现拖拽

vue能实现拖拽

Vue 实现拖拽的方法 Vue 可以通过多种方式实现拖拽功能,包括原生 HTML5 的拖拽 API、第三方库如 vuedraggable 或自定义指令。以下是几种常见的实现方式: 使用 HTML5…