当前位置:首页 > VUE

vue实现模块拖拽

2026-01-11 21:46:34VUE

Vue 实现模块拖拽的方法

使用 HTML5 原生拖拽 API

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

<template>
  <div>
    <div 
      v-for="(item, index) in items" 
      :key="index"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragend="handleDragEnd"
      @dragover.prevent
      @drop="handleDrop(index)"
    >
      {{ item }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['模块1', '模块2', '模块3'],
      draggedIndex: null
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDragEnd() {
      this.draggedIndex = null;
    },
    handleDrop(index) {
      if (this.draggedIndex !== null) {
        const draggedItem = this.items[this.draggedIndex];
        this.items.splice(this.draggedIndex, 1);
        this.items.splice(index, 0, draggedItem);
      }
    }
  }
};
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 组件,提供了更简单的方式实现拖拽功能。

安装 Vue.Draggable:

vue实现模块拖拽

npm install vuedraggable

使用示例:

<template>
  <div>
    <draggable v-model="items" group="modules" @end="onDragEnd">
      <div v-for="(item, index) in items" :key="index">
        {{ item }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: ['模块1', '模块2', '模块3']
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成');
    }
  }
};
</script>

实现跨组件拖拽

如果需要实现跨组件拖拽,可以使用 Vue.Draggable 的 group 属性。

vue实现模块拖拽

<template>
  <div>
    <draggable v-model="list1" group="modules" @end="onDragEnd">
      <div v-for="(item, index) in list1" :key="index">
        {{ item }}
      </div>
    </draggable>
    <draggable v-model="list2" group="modules" @end="onDragEnd">
      <div v-for="(item, index) in list2" :key="index">
        {{ item }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list1: ['模块A', '模块B'],
      list2: ['模块C', '模块D']
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖拽完成');
    }
  }
};
</script>

自定义拖拽样式

可以通过 CSS 自定义拖拽时的样式,例如高亮显示拖拽元素。

.draggable-item {
  padding: 10px;
  margin: 5px;
  background: #f0f0f0;
  border: 1px solid #ddd;
  cursor: move;
}

.draggable-item.drag-start {
  opacity: 0.5;
  background: #c8ebfb;
}
<template>
  <div>
    <div 
      v-for="(item, index) in items" 
      :key="index"
      class="draggable-item"
      :class="{ 'drag-start': draggedIndex === index }"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragend="handleDragEnd"
      @dragover.prevent
      @drop="handleDrop(index)"
    >
      {{ item }}
    </div>
  </div>
</template>

拖拽排序与数据同步

拖拽排序后,需要确保数据同步更新。可以通过 Vue 的响应式数据机制实现。

<template>
  <div>
    <draggable v-model="items" @end="updateOrder">
      <div v-for="(item, index) in items" :key="item.id">
        {{ item.name }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, name: '模块1' },
        { id: 2, name: '模块2' },
        { id: 3, name: '模块3' }
      ]
    };
  },
  methods: {
    updateOrder() {
      console.log('更新后的顺序:', this.items);
    }
  }
};
</script>

通过以上方法,可以在 Vue 中实现模块拖拽功能,并根据需求选择原生 API 或第三方库。

标签: 模块拖拽
分享给朋友:

相关文章

vue实现拖拽改变尺寸

vue实现拖拽改变尺寸

Vue 实现拖拽改变尺寸的方法 使用原生 HTML5 拖拽 API 通过监听 mousedown、mousemove 和 mouseup 事件实现拖拽调整尺寸。创建一个可拖拽的元素,计算鼠标移动距离并…

vue实现拖拽计算器

vue实现拖拽计算器

Vue 拖拽计算器实现方案 核心功能分析 可拖拽组件:计算器整体或按钮需要支持拖拽 2.计算逻辑:实现基本四则运算功能 布局系统:支持动态调整计算器位置 基础实现步骤 安装依赖 需要vue-dragg…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue实现图片拖拽

vue实现图片拖拽

实现图片拖拽功能 在Vue中实现图片拖拽功能可以通过HTML5的拖放API结合Vue的事件处理来完成。以下是一个完整的实现方法: 基础拖拽实现 为图片元素添加draggable属性并绑定相关事件:…

vue实现图标拖拽

vue实现图标拖拽

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