上篇 文章 介绍了 vue使用ElementUI时导航栏默认展开功能的实现 ,今天介绍下element 导航栏收起展开功能的实现思路。
element 导航栏收起展开
实现思路
1. 首先给 el-menu 加上 :collapse="isCollapse" 属性,这个属性也是 element 上的一个参数, 意思 为 是否 开启折叠动画,在 data 中定义 isCollapse ,用 true 和 false 控制展开与收起。
2. 在 ht ML 中写入以下代码。
<el-menu :collapse="isCollapse" class="el-menu-vert ical "></el-menu>
3. 这里还需要把 el-aside 的 宽 度设置为跟 el-menu 一样,以免出现执行展开收起时宽度不一样。
<!-- width的宽度跟collapse一样动态控制 --> <el-aside width="collapse"></el-aside>
4. 展开和收起按钮 利用 两个 icon 图标,通过 点击事件 来动态控制显示与隐藏。
<el-header>
<!-- 点击展开收起导航和切换对应图标 -->
<i class="el -i con -s -fold" @click="isC" v-show ="block"></i>
<i class="el-icon-s-unfold" @click="isC" v-show="toggle"></i>
</el-header>
5. data 中定义的变量。
export default {
n am e: "M ai n",
data() {
return {
isCollapse: false, //导航栏默认为展开
toggle: false,//第二个图标默认隐藏
block: true,//默认显示第一个图标
};
},
};
6. methods 中的点击事件。
methods: {
// 动态控制展开与收起和切换对应图标
isC() {
this.isCollapse = !this.isCollapse;
this.toggle = !this.toggle;
this.block = !this.block;
},
},
7. 用到的 css 代码。
.el-menu-vertical:not(.el-menu--collapse) {
width: 240px;
}
最后附上完整代码
<template>
<div>
<el-container>
<!-- width的宽度跟collapse一样动态控制 -->
<el-aside width="collapse">
<!-- :collapse="isCollapse" class="el-menu-vertical" 动态控制导航菜单的收起与展开 router:让index作为 path 进行路由跳转 -->
<el-menu :default-active="$route.path" router :collapse="isCollapse" class="el-menu-vertical" background-color=" # 393e42"
text-color="#fff" active -t ext-color="rgb(64, 158, 255)">
<el-s ub menu index="1">
<!-- 插槽 插入一级导航标题 -->
<template slot="t IT le">
<i class="el-icon-s-tools"></i>
<span>工厂设置</span>
</template>
<!-- 二级导航标题 -->
<el-menu-item-group>
<el-menu-item index="/A-Business/A-Business">
<i class="el-icon-s-shop"></i>商户信息
</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</el-aside>
<el-container>
<el-header>
<div class="box_bgd" @click="isC">
<!-- 点击展开收起导航和切换对应图标 -->
<i class="el-icon-s-fold" v-show="block"></i>
<i class="el-icon-s-unfold" v-show="toggle"></i>
</div>
</el-header>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
e xp ort default {
data() {
return {
isCollapse: false, //导航栏默认为展开
toggle: false, //第二个图标默认隐藏
block: true, //默认显示第一个图标
};
},
methods: {
// 动态控制展开与收起和切换对应图标
isC() {
this.isCollapse = !this.isCollapse;
this.toggle = !this.toggle;
this.block = !this.block;
},
},
};
</script>
<style sco PE d>
.el-header {
background-color: #b3c0d1;
color: #333;
line-h ei ght: 60px;
height: 100%;
padding: 0 !important;
}
.el-aside {
background-color: #393e42;
color: #333;
height: 100vh;
}
.el-menu {
border-right-width: 0;
}
.el-main {
color: #333;
}
.el-menu-vertical:not(.el-menu--collapse) {
width: 240px;
}
.box_bgd {
height: 60px;
dis play : flex;
align-items: center ;
justify-content: center;
cursor: pointer;
width: 54px;
}
.box_bgd i {
font- Size: 20px;
}
.box_bgd:hover {
background-color: rgb(203, 215, 230);
}
</style>
效果如下
PS:Vue结合element-ui实现导航菜单展开收缩小功能
1. 先上个效果图&nbs p;
这里我把控制菜单收缩的放在中间了,是可以随便 调整 的。
2. 问题思路想法
① 首先是布局,这就是个很经典的后台管 理系 统的容器页面,这里分为上下结构,上面一般放些系统 LOG o、 登录的用户信息,还有一些小功能 等等 。然后下面又分为左右结构,左边就是我们的导航菜单, 右边 那 一块 儿是我们将来所有的业务页面 存放 的地方
② 上下结构布局好说,下面左右结构我们采用display:flex布局,但是问题就是宽度该怎么去设置,我们要实现菜单的收缩功能,宽度都是动态的变化的,右边也要随着左边的变动而 改变 ,结论就是,我们给左边设置宽度为 width: auto,然后右边不设置宽度,直接让右边宽度填满剩下的右侧,即给右侧div设置flex: 1,这样布局基本就可以了
③ 第三就是给el-menu 设置 class="el-menu-vertical" :collapse="isCollapse" 属性,一个是class类名,我们一会儿需要用到(就是展开的时候的宽度) ,还一个是isCollapse,表示开启折叠动画
3. 完整代码实现
<doc>
容器页面
</doc>
<template>
<div class="main">
<div class="layout-top"></div>
<div class="layout-bottom">
<!-- 左侧 -->
<div id="LayoutLeft" class="layout-left">
<el-menu default-active="1" class="el-menu-vertical" :collapse="isCollapse">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span slot="title">导航一</span>
</template>
<el-menu-item-group>
<span slot="title">分组一</span>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-menu-item-group title="分组2">
<el-menu-item index="1-3">选项3</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-4">
<span slot="title">选项4</span>
<el-menu-item index="1-4-1">选项1</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="2">
<i class="el-icon-menu"></i>
<span slot="title">导航二</span>
</el-menu-item>
</el-menu>
<!-- 控制菜单的收缩 -->
<div @click="s hr inkMenu" class="shrink">
<i :class="isCollapse ? 'el-icon-s-unfold': 'el-icon-s-fold'"></i>
</div>
</div>
<!-- 右侧 -->
<div id="LayoutRight" class="layout-right">
<div class="layout-content">
<router-view></router-view>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
computed: {
isCollapse: {
get() {
return this.$ Store . stat e .COM mon.isCollapse
},
set(val) {
this.$store测试数据mit('common/updateisCollapse', val)
}
}
},
methods: {
shrinkMenu() {
this.isCollapse = !this.isCollapse;
}
}
}
</script>
<style>
.main {
width: 100vw;
height: 100vh;
}
/* --- 上面部分 --- */
.layout-top {
width: 100%;
height: 60px;
background: #b3c0d1;
}
/* ------ 下面部分 ------ */
.layout-bottom {
width: 100%;
height: calc(100% - 60px);
/* flex布局 */
display: flex;
}
.layout-left {
/* 左侧不设置宽度 */
width: auto;
height: 100%;
background: #d3dce6;
position: relative;
}
.layout-right {
height: 100%;
/* flex关键代码,让右侧占满剩余宽度 */
flex: 1;
background: #e9eef3;
padding: 25px;
box-sizing: border-box;
}
/* 将来所有的业务页面容器 */
.layout-content {
width: 100%;
height: 100%;
background: #fff;
}
/* el-menu相关样式 */
.el-menu {
height: 100%;
border-right-width: 0;
}
/* 必须设置 */
.el-menu-vertical:not(.el-menu--collapse) {
width: 200px;
}
/* 控制菜单收缩 */
.shrink {
position: absolute;
top: 50%;
right: -25px;
transform: translateY(-50%);
width: 25px;
height: 30px;
border: 1px solid #b3c0d1;
background: #b3c0d1;
display: flex;
justify-content: center;
align-items: center;
border-radius: 3px;
cursor: pointer;
z-index: 9999;
}
</style>
注意:这里我把 isCollapse 存在了Vuex中,然后就是比较 简单 的一些逻辑,大家稍微看下 应该 都能明白。
唯一的核心代码我 觉得 就是下面的左右两侧宽度设置的问题,左侧设置 width: auto,右侧不设置宽度,设置 flex: 1,这是核心的代码。另外还有个核心的是设置 el-menu 展开的宽度即:
.el-menu-vertical:not(.el-menu--collapse) {
width: 200px;
}
这个也是核心,要不然的话,展开收缩的时候会有问题。
到此这篇关于element 实现导航栏收起展开功能及思路的文章就介绍到这了,更多相关element 导航栏收起展开内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章: vue+elementUl导入文件方式(判断文件格式) vue element-ul实现展开和收起功能的实例代码 vue elementui el-form rules动态验证的实例代码详解 vue +elementUl实现展开和收起搜索功能
总结
以上是 为你收集整理的 element?实现导航栏收起展开功能及思路 全部内容,希望文章能够帮你解决 element?实现导航栏收起展开功能及思路 所遇到的问题。
如果觉得 网站内容还不错, 推荐好友。
查看更多关于element 实现导航栏收起展开功能及思路的详细内容...