Vue3菜单展开和收起实现

 更新时间:2024年09月18日 09:49:56   作者:jnfy  
在Vue项目中实现首页布局,包括可收放的左侧菜单和主体内容区,在store中管理菜单状态,通过修改isCollapse状态控制菜单的展开与收起,在home.vue中编写左侧菜单栏的代码和样式,实现一个响应式的用户界面

Vue3菜单展开和收起

先确定我们首页的布局

我们使用一下这种,在src/views/home.vue:

<template>
  <div class="common-layout">
    <el-container>
      <el-aside width="200px">Aside</el-aside>
      <el-container>
        <el-header>Header</el-header>
        <el-main>Main</el-main>
      </el-container>
    </el-container>
  </div>
</template>

先写一下我们左边的菜单

菜单可以收起和展开,所以我们在store/module/common.js 中定义一个 isCollapse状态和修改isCollapse的方法。

import { defineStore } from 'pinia'
export const useCommonStore = defineStore('common', {
  state: () => {
    return {
      token: null,
      isCollapse: false, //默认值
    }
  },
  actions: {
   //改变isCollapse
    updateCollapse() {
      this.isCollapse = !this.isCollapse
    },
  },
  persist: true,
})

这是我要实现的左侧菜单栏代码和样式

//src/views/home.vue
<template>
  <div>
    <el-container>
      <el-aside @mouseover="mouseover" :width="store.isCollapse ? '100px' : '258px'">
        <div class="sidebar">
          <div  class="ga-flex ga-ai-c ga-j-sb  logo-warp p-15">
            <img class="logo m-r-10" src="./../assets/images/galaxy-logo.png" />
            <h2  v-if="!store.isCollapse" class="flex-1">GaUI</h2>
            <a @click="open" v-if="!store.isCollapse">
              <i class="icon-align-left f-20"></i>
            </a>
          </div>
          <div class="p-15">
            <el-menu
              active-text-color="#534686"
              class="el-menu-vertical-demo"
              :collapse="store.isCollapse"
              @open="handleOpen"
              @close="handleClose"
            >
                <el-sub-menu index="1">
                  <template #title>
                    <el-icon><location /></el-icon>
                    <span>Navigator One</span>
                  </template>
                  <el-menu-item index="1-1">item one</el-menu-item>
                  <el-menu-item index="1-2">item two</el-menu-item>
                 
                </el-sub-menu>
             
            </el-menu>
          </div>
        </div>
      </el-aside>
      <el-container>
        <el-header>
          <div>header</div>
        </el-header>
        <el-main>
          Main
        </el-main>
        <el-footer>Footer</el-footer>
      </el-container>
    </el-container>
  </div>
</template>
<script setup>
import { useCommonStore } from '../store/module/common.js'
const store = useCommonStore()
// 点击展开收起
const open = () => {
  store.updateCollapse()
}
// 如果是收起状态,那么鼠标移入时则展开
const mouseover = () => {
  if (store.isCollapse) {
    store.updateCollapse()
  }
}
const handleOpen = (key, keyPath) => {
  //console.log(key, keyPath)
}
const handleClose = (key, keyPath) => {
  //console.log(key, keyPath)
}
</script>
<style lang="scss" scoped>
.sidebar {
  background-color: #ffffff;
  transition: 0.3s;
  min-height: 100vh;
  .logo-warp {
    padding: 20px 25px;
    box-shadow: -9px 0 20px rgb(89 102 122 / 10%);
    .logo {
      width: 50px;
      height: 50px;
    }
    a{
      &:hover{
        color: #534686;
      }
    }
  }
  .el-sub-menu__title:hover {
    background-color: var(--el-menu-hover-bg-color);
  }
}
.el-aside {
  box-shadow: 0 0 21px 0 rgb(89 102 122 / 10%);
}
.el-menu {
  border-right: none !important;
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
  width: 228px;
  min-height: 100%;
}
</style>

左侧菜单效果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现二维码扫码功能(带样式)

    vue实现二维码扫码功能(带样式)

    最近接了一个移动端的项目,实现微信扫码功能,今天小编利用这个平台给大家分享vue实现二维码扫描功能的实现代码,需要的朋友参考下吧
    2021-08-08
  • 如何在vue 中引入使用jquery

    如何在vue 中引入使用jquery

    这篇文章主要介绍了如何在vue 中引入使用jquery,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-11-11
  • Vue项目中Api的组织和返回数据处理的操作

    Vue项目中Api的组织和返回数据处理的操作

    这篇文章主要介绍了Vue项目中Api的组织和返回数据处理的操作,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • vue ElementUI级联选择器回显问题解决

    vue ElementUI级联选择器回显问题解决

    这篇文章主要介绍了vue ElementUI级联选择器回显问题解决,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Vue3中reactive变量重新赋值无法响应的3种处理方法

    Vue3中reactive变量重新赋值无法响应的3种处理方法

    这篇文章主要给大家介绍了关于Vue3中reactive变量重新赋值无法响应的3种处理方法,在Vue3中可以使用reactive函数将一个普通对象转换为响应式对象,需要的朋友可以参考下
    2023-08-08
  • vue实现商品加减计算总价的实例代码

    vue实现商品加减计算总价的实例代码

    这篇文章主要介绍了vue实现商品加减计算总价的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • 解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题

    解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题

    这篇文章主要介绍了解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue实现动态路由详细

    vue实现动态路由详细

    我们开发后台管理系统过程中,会由不同的人操作系统,有admin(管理员)、superAdmin(超管),及各种运营、财务人员。为了区别这些人员,会给不同的人分配不一样的角色来展示不同的菜单,这就必须要通过动态路由来实现。下面就来介绍vue实现动态路由,需要的朋友可参考一下
    2021-10-10
  • vue component 中引入less文件报错 Module build failed

    vue component 中引入less文件报错 Module build failed

    这篇文章主要介绍了vue component 中引入less文件报错 Module build failed的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • vue 二维码长按保存和复制内容操作

    vue 二维码长按保存和复制内容操作

    这篇文章主要介绍了vue 二维码长按保存和复制内容操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论