当前位置:首页 > 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 实现模块显示顺序的方法 在 Vue 中实现模块显示顺序的控制,可以通过多种方式实现,以下是一些常见的方法: 使用 v-for 和排序数组 通过 v-for 遍历一个排序后的数组,动态渲染模块…

vue内实现拖拽

vue内实现拖拽

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

vue实现拖拽连接

vue实现拖拽连接

Vue 实现拖拽连接功能 在 Vue 中实现拖拽连接功能通常涉及使用 HTML5 的拖放 API 或第三方库(如 vuedraggable)。以下是两种常见实现方式: 使用 HTML5 拖放 API…

vue实现carousel拖拽

vue实现carousel拖拽

实现拖拽轮播的基本思路 在Vue中实现可拖拽的Carousel组件需要结合触摸事件(touchstart、touchmove、touchend)和鼠标事件(mousedown、mousemove、mo…

vue 实现可拖拽

vue 实现可拖拽

实现拖拽功能的基本思路 在Vue中实现拖拽功能可以通过HTML5的Drag and Drop API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5原生拖拽…

vue实现面板拖拽

vue实现面板拖拽

Vue 实现面板拖拽的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 在 Vue 模板中为元素添加 dra…