当前位置:首页 > VUE

vue实现内容拖拽

2026-02-18 08:06:16VUE

Vue 实现内容拖拽的方法

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

使用 HTML5 Drag and Drop API

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

vue实现内容拖拽

<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 拖拽组件,使用起来更加简便。

vue实现内容拖拽

安装 vuedraggable

npm install vuedraggable

使用示例:

<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 在移动端的支持有限。

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

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

相关文章

uniapp 内容列表

uniapp 内容列表

uniapp 内容列表的实现方法 在uniapp中实现内容列表通常需要结合组件和数据绑定。以下是一个常见的方法: 模板部分 <template> <view class="c…

vue实现拖拽图层

vue实现拖拽图层

Vue 实现拖拽图层的方法 使用原生 HTML5 拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue日历拖拽实现

vue日历拖拽实现

Vue 日历拖拽实现方案 使用 vue-draggable 库 安装依赖库: npm install vuedraggable 基础拖拽日历实现代码: <template> <…

vue实现拖拽图片

vue实现拖拽图片

实现拖拽图片的基本方法 使用 Vue 实现拖拽图片功能可以通过 HTML5 的拖放 API 结合 Vue 的事件绑定来实现。以下是具体实现步骤: 安装 Vue 拖拽库(可选) 如果不想手动实现,可以…

vue实现拖拽配置

vue实现拖拽配置

Vue 实现拖拽功能 在 Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库(如 vuedraggable)来完成。以下是两种常见的实现方式: 使用 HTML5 拖拽 API…

vue实现分页显示内容

vue实现分页显示内容

Vue实现分页显示内容的方法 基础分页实现 在Vue中实现分页功能通常需要结合v-for指令和计算属性。定义一个currentPage变量表示当前页码,itemsPerPage表示每页显示的项目数。通…