当前位置:首页 > 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 中实现拖放功能通常可以通过 HTML5 的原生拖放 API 或第三方库(如 vuedraggable)来实现。以下是两种方法的详细说明。 使用 HTML5 原生拖放 A…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue实现例子

vue实现例子

以下是一些常见的 Vue 实现例子,涵盖基础功能到进阶应用场景: 基础数据绑定 使用 v-model 实现双向数据绑定: <template> <div> &l…