当前位置:首页 > VUE

vue 实现拖拽

2026-02-10 00:50:45VUE

Vue 实现拖拽功能

Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库如 vuedraggable 来完成。以下是两种方法的详细实现方式。

使用 HTML5 拖拽 API

HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstartdragenddragoverdrop 事件实现拖拽功能。

vue 实现拖拽

<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart($event, item)"
      @dragend="handleDragEnd"
      class="draggable-item"
    >
      {{ item.name }}
    </div>

    <div 
      @dragover.prevent
      @drop="handleDrop"
      class="drop-zone"
    >
      拖拽到这里
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' },
      ],
      draggedItem: null,
    };
  },
  methods: {
    handleDragStart(event, item) {
      this.draggedItem = item;
      event.dataTransfer.setData('text/plain', item.id);
    },
    handleDragEnd() {
      this.draggedItem = null;
    },
    handleDrop(event) {
      event.preventDefault();
      const itemId = event.dataTransfer.getData('text/plain');
      const item = this.items.find(item => item.id === parseInt(itemId));
      if (item) {
        // 处理拖拽后的逻辑,如更新列表
        console.log('Dropped item:', item);
      }
    },
  },
};
</script>

<style>
.draggable-item {
  padding: 10px;
  margin: 5px;
  background: #f0f0f0;
  cursor: move;
}
.drop-zone {
  padding: 20px;
  margin: 10px;
  background: #e0e0e0;
  border: 2px dashed #ccc;
}
</style>

使用 vuedraggable 库

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

vue 实现拖拽

安装 vuedraggable

npm install vuedraggable

示例代码:

<template>
  <div>
    <h3>可拖拽列表</h3>
    <draggable 
      v-model="items" 
      @end="onDragEnd"
      item-key="id"
    >
      <template #item="{ element }">
        <div class="draggable-item">
          {{ element.name }}
        </div>
      </template>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' },
      ],
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽结束,当前列表:', this.items);
    },
  },
};
</script>

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

注意事项

  • 使用原生 HTML5 拖拽 API 时,需要调用 event.preventDefault() 来阻止默认行为。
  • vuedraggable 提供了更高级的功能,如动画、跨列表拖拽等,适合复杂场景。
  • 拖拽操作可能会触发 Vue 的响应式更新,确保数据状态正确同步。

标签: 拖拽vue
分享给朋友:

相关文章

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue 实现过滤

vue 实现过滤

Vue 实现过滤的方法 在 Vue 中实现过滤功能可以通过多种方式完成,包括使用计算属性、自定义过滤器、第三方库等。以下是几种常见的实现方法: 使用计算属性进行过滤 计算属性是 Vue 中最常用的过…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…