Vue3+Element-Plus實現(xiàn)左側菜單折疊與展開功能示例
1.最終實現(xiàn)的效果圖

2. 實現(xiàn)左側菜單折疊與展開功能步驟
2.1 首先應該在菜單頂部放一個折疊展開的按鈕條

2.2 接下來,畫按鈕條UI結構,實現(xiàn)折疊與展開功能
1. 在側邊欄內部,在側邊欄菜單區(qū)域之前,放置一個DIV。

2. 在該DIV上面添加文本,通過點擊該DIV,觸發(fā)菜單折疊與展開

3.通過類選擇器,為該DIV 添加相關樣式
.toggle-button{
// 添加背景顏色
background-color: #4A5064;
// 設置文本大小
font-size:10px;
// 設置文本行高
line-height:24px;
// 設置文本顏色
color:#fff;
// 設置文本居中
text-align: center;
// 設置文本間距
letter-spacing: 0.2em;
// 設置鼠標懸浮變小手效果
cursor:pointer;
}4. 添加完樣式后的效果

2.3 實現(xiàn)點擊該DIV時,觸發(fā)菜單折疊與展開
1. 首先,需要為該DIV 按鈕條,綁定單擊事件

2. 為側邊欄菜單綁定 collapse 屬性
collapse 屬性 說明:是否水平折疊收起菜單(僅在 mode 為 vertical 時可用)
該屬性默認值是 False,把該值改變 True,就可以實現(xiàn)折疊與展開效果了
Menu 菜單 | Element Plus (gitee.io)

如上,為菜單欄綁定了屬性并賦值后,左側菜單欄折疊與展開效果還并未生效。
3. 接下來先為側邊欄菜單 collapse 屬性 動態(tài)賦值,并實現(xiàn)按鈕條的點擊單擊事件,讓折疊與展開效果生效
首先在數(shù)據(jù)區(qū)定義一個接受bool 變量對象

當觸發(fā)DIV 點擊事件時,對該bool 值對象進行動態(tài)賦值切換

修改側邊欄,動態(tài)接受bool 值

通過collapse-transition 關閉側邊欄收縮動畫效果。就是左側菜單欄收縮是,是否有動畫效果。默認值是true

4.效果

2.4 折疊與展開功能是實現(xiàn)了,但是背景顏色并沒有隨著菜單折疊時跟著變小或展開時跟著變大

1. 是什么原因導致的
首先,整個紅色區(qū)域是屬于左側菜單欄的,那么查看代碼的UI結構時,就會發(fā)現(xiàn),這個菜單側邊欄是固定寫死了一個200寬度的像素。 也就是說,是固定的這個寬度值,導致左側菜單欄背景無法跟著動態(tài)折疊起來的原因。

2. 如何解決 只需要在判斷折疊與展開時,賦不同的寬度值即可解決
也就是說,如果 isCollapse 值為true(折疊) 的時候,賦值為46 px (把像素值變?。?。isCollapse 值為false (展開)的時候,賦值為200 px (把像素值還原)。
通過三元運算符解決

2.5. 最終效果

3. Home.vue 代碼
<template>
<el-container class="home_container">
<!-- 頭部區(qū)域 -->
<el-header>
<div>
<img src="../assets/heima.png" alt="" />
<span>電商后臺管理系統(tǒng)</span>
</div>
<el-button type="info" @click="logout">退出</el-button>
</el-header>
<!-- 頁面主體區(qū)域 -->
<el-container>
<!-- 側邊欄 -->
<el-aside :width="isCollapse ? '64px':'200px'">
<div class="toggle-button" @click="toggleCollapse">|||</div>
<!-- 側邊欄菜單區(qū)域 -->
<el-menu active-text-color="#409Eff"
background-color="#545c64"
text-color="#fff" unique-opened :collapse="isCollapse" :collapse-transition="false">
<!-- 一級菜單 -->
<el-submenu :index="item.id+''" v-for="item in menulist" :key="item.id">
<!-- 一級菜單模板區(qū)域 -->
<template #title>
<el-icon :class="iconsObj[item.id]"></el-icon>
<span>{{item.authName}}</span>
</template>
<!-- 二級菜單 -->
<el-menu-item :index="subItem.id+''" v-for="subItem in item.children" :key="subItem.id">
<template #title>
<el-icon><iconMenu /></el-icon>
<span>{{subItem.authName}}</span>
</template>
</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<!-- 右側內容主體區(qū)域 -->
<el-main>Main</el-main>
</el-container>
</el-container>
</template>
<script>
export default {
data () {
return {
// 左側菜單數(shù)據(jù)對象
menulist: [],
// 字體圖標對象
iconsObj: {
125: 'iconfont icon-users',
103: 'iconfont icon-tijikongjian',
101: 'iconfont icon-shangpin',
102: 'iconfont icon-danju',
145: 'iconfont icon-baobiao'
},
// 是否折疊
isCollapse: false
}
},
created () {
this.getMenuList()
},
methods: {
logout () {
window.sessionStorage.clear()
this.$router.push('/login')
},
// 獲取所有的菜單數(shù)據(jù)
async getMenuList () {
const { data: res } = await this.$http.get('menus')
if (res.meta.status !== 200) return this.$message.error(res.meta.msg)
// 成功了,進行賦值
this.menulist = res.data
console.log(res)
},
// 點擊按鈕,切換菜單的折疊與展開
toggleCollapse () {
this.isCollapse = !this.isCollapse
}
}
}
</script>
<style lang="less" scoped>
.home_container {
height: 100%;
}
.el-header {
background-color: #363d40;
// 給頭部設置一下彈性布局
display: flex;
// 讓它貼標左右對齊
justify-content: space-between;
// 清空圖片左側padding
padding-left: 0;
// 按鈕居中
align-items: center;
// 文本顏色
color: #fff;
// 設置文本字體大小
font-size: 20px;
// 嵌套
> div {
// 彈性布局
display: flex;
// 縱向上居中對齊
align-items: center;
// 給文本和圖片添加間距,使用類選擇器
span {
margin-left: 15px;
}
}
}
.el-aside {
background-color: #313743;
.el-menu {
border-right: none;
}
}
.el-main {
background-color: #e9edf1;
}
.iconfont{
margin-right: 10px;
}
.toggle-button{
// 添加背景顏色
background-color: #4A5064;
// 設置文本大小
font-size:10px;
// 設置文本行高
line-height:24px;
// 設置文本顏色
color:#fff;
// 設置文本居中
text-align: center;
// 設置文本間距
letter-spacing: 0.2em;
// 設置鼠標懸浮變小手效果
cursor:pointer;
}
</style>
到此這篇關于Vue3+Element-Plus實現(xiàn)左側菜單折疊與展開功能示例的文章就介紹到這了,更多相關Vue3+Element-Plus左側菜單折疊與展開內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue2 拖動排序 vuedraggable組件的實現(xiàn)
這篇文章主要介紹了vue2 拖動排序 vuedraggable組件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
Vue判斷字符串(或數(shù)組)中是否包含某個元素的多種方法
在我們前端日常開發(fā)中經(jīng)常會遇到判斷一個字符串中是否包含某個元素的需求,下面這篇文章主要給大家介紹了關于Vue判斷字符串(或數(shù)組)中是否包含某個元素的多種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-09-09
vue elementUI 表單校驗功能之數(shù)組多層嵌套
這篇文章主要介紹了vue elementUI 表單校驗(數(shù)組多層嵌套)功能的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-06-06
vue3+vite實現(xiàn)低版本瀏覽器兼容的解決方案(出現(xiàn)白屏問題)
項目全線使用vue3的時候,自然使用的是配套更加契合的vite打包工具,于是自然而然會用到很多新的語法,本文給大家介紹了vue3+vite實現(xiàn)低版本瀏覽器兼容的解決方案(出現(xiàn)白屏問題),需要的朋友可以參考下2024-04-04

