当前位置:首页 > VUE

vue实现菜单拖拽排序

2026-01-22 04:21:54VUE

实现思路

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

使用HTML5原生拖放API

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

<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组件,简化了拖拽排序的实现。

安装依赖:

npm install vuedraggable

代码示例:

vue实现菜单拖拽排序

<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菜单tab实现

vue菜单tab实现

实现Vue菜单Tab的步骤 在Vue中实现菜单Tab功能,可以通过动态组件或条件渲染来实现。以下是几种常见的方法: 使用动态组件 动态组件允许根据当前选中的Tab动态切换显示内容。定义一个组件数组…

vue 中实现拖拽

vue 中实现拖拽

Vue 中实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop…

vue实现拖拽改变尺寸

vue实现拖拽改变尺寸

Vue 实现拖拽改变尺寸的方法 使用原生 HTML5 拖拽 API 通过监听 mousedown、mousemove 和 mouseup 事件实现拖拽改变尺寸。创建一个可拖拽的边界元素,调整目标元素的…

vue菜单tab实现

vue菜单tab实现

Vue 菜单 Tab 实现方法 使用动态组件切换内容 通过 Vue 的 component 动态组件结合 v-for 渲染菜单项,点击时切换显示内容: <template> <…

vue实现面板拖拽

vue实现面板拖拽

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

利用vue实现拖拽

利用vue实现拖拽

使用 Vue 实现拖拽功能 原生 HTML5 拖拽 API Vue 可以结合 HTML5 的拖拽 API 实现基础拖拽功能。以下是一个简单示例: <template> <div…