Vue3菜單展開(kāi)和收起實(shí)現(xiàn)
Vue3菜單展開(kāi)和收起
先確定我們首頁(yè)的布局
我們使用一下這種,在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>先寫(xiě)一下我們左邊的菜單
菜單可以收起和展開(kāi),所以我們?cè)趕tore/module/common.js 中定義一個(gè) isCollapse狀態(tài)和修改isCollapse的方法。
import { defineStore } from 'pinia'
export const useCommonStore = defineStore('common', {
state: () => {
return {
token: null,
isCollapse: false, //默認(rèn)值
}
},
actions: {
//改變isCollapse
updateCollapse() {
this.isCollapse = !this.isCollapse
},
},
persist: true,
})這是我要實(shí)現(xiàn)的左側(cè)菜單欄代碼和樣式
//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()
// 點(diǎn)擊展開(kāi)收起
const open = () => {
store.updateCollapse()
}
// 如果是收起狀態(tài),那么鼠標(biāo)移入時(shí)則展開(kāi)
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>左側(cè)菜單效果:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 實(shí)現(xiàn)登錄界面驗(yàn)證碼功能
本文通過(guò)實(shí)例代碼給大家介紹了Vue 實(shí)現(xiàn)登錄界面 驗(yàn)證碼功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
elementui的table列超出隱藏tooltip懸浮顯示問(wèn)題
這篇文章主要介紹了elementui的table列超出隱藏tooltip懸浮顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
vuex之this.$store.dispatch()與this.$store.commit()的區(qū)別及說(shuō)明
這篇文章主要介紹了vuex之this.$store.dispatch()與this.$store.commit()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Vue中router.beforeEach與beforeRouteEnter的區(qū)別及說(shuō)明
這篇文章主要介紹了Vue中router.beforeEach與beforeRouteEnter的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue keep-alive實(shí)踐總結(jié)(推薦)
本篇文章主要介紹了Vue keep-alive實(shí)踐總結(jié)(推薦),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

