当前位置:首页 > 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提交排序后的数组。

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

相关文章

纯css制作tab菜单

纯css制作tab菜单

纯CSS制作Tab菜单的方法 使用radio input控制切换 通过<input type="radio">和<label>元素配合实现无JavaScript的Tab切换效果…

vue实现菜单

vue实现菜单

使用 Vue 实现菜单 Vue 可以轻松实现动态菜单,通常结合路由和组件化思想。以下是一个基于 Vue 3 和 Vue Router 的菜单实现方案: 基础菜单结构 在 Vue 中,菜单通常是一个递…

vue实现拖拽到容器里

vue实现拖拽到容器里

实现拖拽到容器的基本步骤 安装并引入 Vue.Draggable 库,这是一个基于 Sortable.js 的 Vue 拖拽组件。可以通过 npm 或 yarn 进行安装。 npm install…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

vue拖拽实现

vue拖拽实现

vue拖拽实现方法 使用HTML5原生拖拽API HTML5提供原生拖拽API,通过draggable属性、dragstart、dragend等事件实现基础拖拽功能。 <template&g…

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inli…