当前位置:首页 > VUE

vue实现菜单拖拽排序

2026-01-22 04:21:54VUE

实现思路

Vue中实现菜单拖拽排序通常需要结合HTML5的拖放API或第三方库如vuedraggable。以下是两种常见方法的详细说明。

使用HTML5原生拖放API

HTML5提供了原生的拖放API,通过监听dragstartdragoverdrop等事件实现拖拽排序。

vue实现菜单拖拽排序

<template>
  <ul>
    <li
      v-for="(item, index) in menuItems"
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart(index)"
      @dragover.prevent="handleDragOver(index)"
      @drop="handleDrop(index)"
    >
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { id: 1, name: '菜单1' },
        { id: 2, name: '菜单2' },
        { id: 3, name: '菜单3' }
      ],
      draggedIndex: null
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDragOver(index) {
      if (this.draggedIndex !== index) {
        const draggedItem = this.menuItems[this.draggedIndex];
        this.menuItems.splice(this.draggedIndex, 1);
        this.menuItems.splice(index, 0, draggedItem);
        this.draggedIndex = index;
      }
    },
    handleDrop() {
      this.draggedIndex = null;
    }
  }
};
</script>

使用vuedraggable库

vuedraggable是基于Sortable.js的Vue组件,简化了拖拽排序的实现。

vue实现菜单拖拽排序

安装依赖:

npm install vuedraggable

代码示例:

<template>
  <draggable
    v-model="menuItems"
    item-key="id"
    @end="onDragEnd"
  >
    <template #item="{ element }">
      <li>{{ element.name }}</li>
    </template>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      menuItems: [
        { id: 1, name: '菜单1' },
        { id: 2, name: '菜单2' },
        { id: 3, name: '菜单3' }
      ]
    };
  },
  methods: {
    onDragEnd() {
      console.log('排序后的数据:', this.menuItems);
    }
  }
};
</script>

注意事项

  • 使用原生API时需注意浏览器兼容性,尤其是移动端支持较差。
  • vuedraggable提供了更多高级功能如动画、拖拽手柄等,适合复杂场景。
  • 拖拽后需更新后端数据,通常通过API提交排序后的数组。

标签: 拖拽菜单
分享给朋友:

相关文章

vue实现图片拖拽

vue实现图片拖拽

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

vue实现左右菜单联动实现

vue实现左右菜单联动实现

Vue 实现左右菜单联动 使用事件总线通信 在 Vue 中可以通过事件总线实现左右菜单的通信。创建一个中央事件总线实例,让左右菜单通过事件监听和触发实现联动。 // eventBus.js imp…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

vue实现模块拖拽

vue实现模块拖拽

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

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…