当前位置:首页 > VUE

vue实现内容拖拽

2026-02-18 08:06:16VUE

Vue 实现内容拖拽的方法

在 Vue 中实现拖拽功能可以通过 HTML5 的 Drag and Drop API 或第三方库如 vuedraggable 来实现。以下是两种常见的实现方式:

使用 HTML5 Drag and Drop API

HTML5 提供了原生的拖拽支持,可以通过 draggable 属性和拖拽事件来实现。

<template>
  <div>
    <div
      v-for="item in items"
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart($event, item)"
      @dragover.prevent
      @drop="handleDrop($event, 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' },
      ],
      draggedItem: null,
    };
  },
  methods: {
    handleDragStart(event, item) {
      this.draggedItem = item;
      event.dataTransfer.setData('text/plain', item.id);
    },
    handleDrop(event, targetItem) {
      if (this.draggedItem === targetItem) return;
      const draggedIndex = this.items.findIndex(item => item.id === this.draggedItem.id);
      const targetIndex = this.items.findIndex(item => item.id === targetItem.id);
      const newItems = [...this.items];
      newItems.splice(draggedIndex, 1);
      newItems.splice(targetIndex, 0, this.draggedItem);
      this.items = newItems;
    },
  },
};
</script>

使用 vuedraggable 库

vuedraggable 是一个基于 Sortable.js 的 Vue 拖拽组件,使用起来更加简便。

安装 vuedraggable

npm install vuedraggable

使用示例:

vue实现内容拖拽

<template>
  <div>
    <draggable v-model="items" @end="onDragEnd">
      <div v-for="item in items" :key="item.id">
        {{ 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>

注意事项

  • 使用原生 Drag and Drop API 时,需要手动处理拖拽逻辑,较为复杂。
  • vuedraggable 提供了更高级的功能,如动画、跨列表拖拽等,适合复杂场景。
  • 在移动端可能需要额外的库或处理,因为原生 Drag and Drop API 在移动端的支持有限。

以上两种方法可以根据项目需求选择使用。

标签: 拖拽内容
分享给朋友:

相关文章

vue实现图标拖拽

vue实现图标拖拽

Vue 实现图标拖拽 使用 HTML5 拖放 API 在 Vue 中实现图标拖拽可以利用 HTML5 的拖放 API。通过 draggable 属性标记可拖拽元素,并监听 dragstart、drag…

vue能实现拖拽

vue能实现拖拽

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

vue实现拖拽表格

vue实现拖拽表格

Vue 实现拖拽表格的方法 使用第三方库(推荐) 推荐使用 vuedraggable 或 sortablejs 这类成熟的拖拽库,它们对 Vue 有良好支持且功能丰富。 安装 vuedraggabl…

vue实现拖拽上传

vue实现拖拽上传

Vue 拖拽上传实现方法 使用 HTML5 原生拖拽 API 在 Vue 中可以通过监听原生拖拽事件实现基础功能: <template> <div class="dr…

vue实现元素拖拽

vue实现元素拖拽

Vue 实现元素拖拽的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性结合事件监听实现拖拽功能。 <template>…

用vue实现拖拽

用vue实现拖拽

使用 Vue 实现拖拽功能 Vue 可以通过原生 HTML5 的拖拽 API 或第三方库(如 vuedraggable)实现拖拽功能。以下是两种方法的详细实现方式。 使用 HTML5 拖拽 API…