当前位置:首页 > 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 实现探探卡片效果 探探卡片的交互效果主要包括卡片堆叠、左右滑动、缩放和旋转动画。以下是基于 Vue 3 的实现方法: 核心组件结构 使用 v-for 渲染卡片列表,通过 CSS 绝对定位实现…

vue实现卡片列表

vue实现卡片列表

Vue 实现卡片列表 使用 v-for 动态渲染卡片列表 通过 Vue 的 v-for 指令可以动态渲染卡片列表,数据通常存储在组件的 data 或通过 API 获取。 <template&g…

vue实现添加卡片

vue实现添加卡片

Vue 实现添加卡片功能 数据驱动渲染 在Vue中,卡片通常通过v-for循环数据数组渲染。定义cards数组存储卡片数据,每个卡片对象包含标题、内容等属性: data() { return {…

vue实现卡片效果

vue实现卡片效果

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

vue实现双列商品卡片

vue实现双列商品卡片

Vue 实现双列商品卡片 使用 Vue 实现双列商品卡片可以通过 flex 布局或 grid 布局实现,以下是两种常见方法: 方法一:使用 Flex 布局 <template> &l…

react 如何判断卡片的高度

react 如何判断卡片的高度

获取卡片高度的常用方法 在React中,可以通过以下几种方式获取卡片(或任意DOM元素)的高度: 使用useRef和useEffect钩子 import React, { useRef,…