当前位置:首页 > VUE

vue实现左右菜单

2026-02-10 21:14:07VUE

Vue 实现左右菜单

使用 Vue Router 和组件结构

创建一个基本的 Vue 项目结构,包含左右菜单组件和主内容区域。通过 Vue Router 实现路由跳转。

<template>
  <div class="app-container">
    <div class="left-menu">
      <ul>
        <li v-for="item in leftMenuItems" :key="item.path">
          <router-link :to="item.path">{{ item.name }}</router-link>
        </li>
      </ul>
    </div>
    <div class="right-menu">
      <ul>
        <li v-for="item in rightMenuItems" :key="item.path">
          <router-link :to="item.path">{{ item.name }}</router-link>
        </li>
      </ul>
    </div>
    <div class="main-content">
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      leftMenuItems: [
        { path: '/left1', name: '左侧菜单1' },
        { path: '/left2', name: '左侧菜单2' }
      ],
      rightMenuItems: [
        { path: '/right1', name: '右侧菜单1' },
        { path: '/right2', name: '右侧菜单2' }
      ]
    }
  }
}
</script>

<style>
.app-container {
  display: flex;
  height: 100vh;
}
.left-menu, .right-menu {
  width: 200px;
  background: #f0f0f0;
  padding: 20px;
}
.main-content {
  flex: 1;
  padding: 20px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  margin-bottom: 10px;
}
</style>

动态菜单与状态管理

对于更复杂的场景,可以使用 Vuex 管理菜单状态,实现动态菜单加载和权限控制。

vue实现左右菜单

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    leftMenu: [],
    rightMenu: []
  },
  mutations: {
    SET_MENUS(state, { left, right }) {
      state.leftMenu = left
      state.rightMenu = right
    }
  },
  actions: {
    async fetchMenus({ commit }) {
      // 模拟API调用
      const left = await getLeftMenu()
      const right = await getRightMenu()
      commit('SET_MENUS', { left, right })
    }
  }
})

// 组件中使用
export default {
  computed: {
    leftMenuItems() {
      return this.$store.state.leftMenu
    },
    rightMenuItems() {
      return this.$store.state.rightMenu
    }
  },
  created() {
    this.$store.dispatch('fetchMenus')
  }
}

响应式布局

添加响应式设计,在小屏幕设备上隐藏一侧菜单或改为折叠式菜单。

vue实现左右菜单

@media (max-width: 768px) {
  .right-menu {
    display: none;
  }
  .left-menu {
    width: 60px;
    overflow: hidden;
  }
  .left-menu:hover {
    width: 200px;
  }
}

动画过渡效果

为菜单项添加过渡动画,提升用户体验。

<transition-group name="menu-item" tag="ul">
  <li v-for="item in leftMenuItems" :key="item.path">
    <router-link :to="item.path">{{ item.name }}</router-link>
  </li>
</transition-group>

<style>
.menu-item-enter-active, .menu-item-leave-active {
  transition: all 0.5s;
}
.menu-item-enter, .menu-item-leave-to {
  opacity: 0;
  transform: translateX(-30px);
}
</style>

嵌套路由配置

配置嵌套路由以匹配菜单结构,确保路由与菜单项同步。

const router = new VueRouter({
  routes: [
    {
      path: '/left',
      component: LeftContainer,
      children: [
        { path: 'left1', component: Left1 },
        { path: 'left2', component: Left2 }
      ]
    },
    {
      path: '/right',
      component: RightContainer,
      children: [
        { path: 'right1', component: Right1 },
        { path: 'right2', component: Right2 }
      ]
    }
  ]
})

标签: 菜单vue
分享给朋友:

相关文章

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue实现链接

vue实现链接

Vue 实现链接的方法 在 Vue 中实现链接可以通过多种方式,包括使用 <router-link>、<a> 标签或编程式导航。以下是几种常见的方法: 使用 <rout…

vue指令实现

vue指令实现

Vue 指令的实现方式 Vue 指令是特殊的标记,用于在 DOM 元素上应用特定的行为。可以通过全局或局部方式注册自定义指令。 全局注册指令 在 Vue 应用中通过 Vue.directive 方法…

黑马vue实现

黑马vue实现

以下是关于使用 Vue.js 实现黑马相关功能或项目的关键方法和实践指南: 环境配置与项目初始化 安装最新版 Vue CLI 或使用 Vite 创建项目: npm create vue@lates…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

vue实现梯形

vue实现梯形

在Vue中实现梯形效果,可以通过CSS的transform属性或clip-path属性来实现。以下是几种常见的实现方法: 使用CSS transform实现梯形 通过CSS的transform: s…