当前位置:首页 > VUE

vue实现卡片拖动排序

2026-01-19 23:34:29VUE

Vue 实现卡片拖动排序的方法

使用 Vue 实现卡片拖动排序可以通过原生 HTML5 的拖放 API 或第三方库如 vuedraggable 来实现。以下是两种方法的详细说明。

使用 HTML5 拖放 API

HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件(如 dragstartdragenddragoverdrop)实现拖拽排序。

<template>
  <div>
    <div
      v-for="(item, index) in items"
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragover.prevent="handleDragOver(index)"
      @drop="handleDrop(index)"
      class="draggable-item"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: "Item 1" },
        { id: 2, text: "Item 2" },
        { id: 3, text: "Item 3" },
      ],
      draggedIndex: null,
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDragOver(index) {
      if (this.draggedIndex !== index) {
        const draggedItem = this.items[this.draggedIndex];
        this.items.splice(this.draggedIndex, 1);
        this.items.splice(index, 0, draggedItem);
        this.draggedIndex = index;
      }
    },
    handleDrop() {
      this.draggedIndex = null;
    },
  },
};
</script>

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

使用 vuedraggable

vuedraggable 是一个基于 Sortable.js 的 Vue 拖拽组件,提供了更简单的 API 和更丰富的功能。

vue实现卡片拖动排序

安装 vuedraggable

npm install vuedraggable

示例代码:

vue实现卡片拖动排序

<template>
  <div>
    <draggable v-model="items" @end="onDragEnd">
      <div v-for="item in items" :key="item.id" class="draggable-item">
        {{ item.text }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from "vuedraggable";
export default {
  components: {
    draggable,
  },
  data() {
    return {
      items: [
        { id: 1, text: "Item 1" },
        { id: 2, text: "Item 2" },
        { id: 3, text: "Item 3" },
      ],
    };
  },
  methods: {
    onDragEnd() {
      console.log("拖动完成,当前顺序:", this.items);
    },
  },
};
</script>

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

两种方法的对比

  1. HTML5 拖放 API

    • 无需额外依赖,适合简单场景。
    • 需要手动处理更多细节(如索引更新、事件阻止默认行为)。
  2. vuedraggable

    • 功能更强大,支持动画、跨列表拖拽等高级功能。
    • 代码更简洁,适合复杂场景。

根据项目需求选择合适的方法。如果需要快速实现且功能简单,可以使用 HTML5 API;如果需要更多功能或简化代码,推荐使用 vuedraggable

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

相关文章

vue怎么实现拖动

vue怎么实现拖动

Vue 实现拖动的常用方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现基础拖动功能。适用于简单场景。 <temp…

vue实现卡片效果

vue实现卡片效果

Vue实现卡片效果的方法 使用Vue实现卡片效果可以通过多种方式完成,包括使用原生CSS、UI框架或自定义组件。以下是几种常见方法: 使用原生CSS和Vue组件 创建一个简单的卡片组件,结合CSS实…

vue 实现表格列拖动

vue 实现表格列拖动

实现表格列拖动的核心方法 使用 Vue 实现表格列拖动功能主要依赖 HTML5 的拖放 API 和 Vue 的数据绑定特性。以下是具体实现步骤: 基础拖放 API 设置 为表格列头添加 dragga…

vue.js实现拖动

vue.js实现拖动

Vue.js 实现拖动功能 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

react实现卡片效果

react实现卡片效果

React 实现卡片效果的方法 使用内联样式实现基础卡片 在 React 组件中直接通过 style 属性定义卡片样式: function Card() { return ( <d…

react实现拖动排序

react实现拖动排序

实现拖动排序的基本思路 在React中实现拖动排序通常借助第三方库如react-beautiful-dnd或react-dnd。这两种库提供了完整的拖放API,适合列表、看板等场景的排序需求。 使用…