首页前端开发VUEelement 实现导航栏收起展开功能及思路

element 实现导航栏收起展开功能及思路

时间2024-02-11 06:38:03发布访客分类VUE浏览574
导读:收集整理的这篇文章主要介绍了element 实现导航栏收起展开功能及思路,觉得挺不错的,现在分享给大家,也给大家做个参考。 目录element 导航栏收起展开实现思路@L_512_2@上...
收集整理的这篇文章主要介绍了element 实现导航栏收起展开功能及思路,觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
  • element 导航栏收起展开
    • 实现思路
  • @L_512_2@

    上篇文章介绍了vue使用ElementUI时导航栏默认展开功能的实现,今天介绍下element 导航栏收起展开功能的实现思路。

    element 导航栏收起展开

    实现思路

    1. 首先给 el-menu 加上 :collapse="isCollapse" 属性,这个属性也是 element 上的一个参数,意思为是否开启折叠动画,在 data 中定义 isCollapse ,用 truefalse 控制展开与收起。

    2. 在 htML 中写入以下代码。

     el-menu :collapse="isCollapse" class="el-menu-vertical">
        /el-menu>
        

    3. 这里还需要把 el-aside 的宽度设置为跟 el-menu 一样,以免出现执行展开收起时宽度不一样。

      !-- width的宽度跟collapse一样动态控制 -->
          el-aside width="collapse">
        /el-aside>
        

    4. 展开和收起按钮利用两个 icon 图标,通过点击事件来动态控制显示与隐藏。

       el-header>
                  !-- 点击展开收起导航和切换对应图标 -->
                  i class="el-icon-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 {
      name: "Main",  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-text-color="rgb(64, 158, 255)">
                  el-submenu index="1">
                    !-- 插槽 插入一级导航标题 -->
                    template slot="tITle">
                      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>
    export 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 scoPEd>
    .el-header {
          background-color: #b3c0d1;
          color: #333;
          line-height: 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;
          display: 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. 先上个效果图 

    这里我把控制菜单收缩的放在中间了,是可以随便调整的。 

    2. 问题思路想法 

    ① 首先是布局,这就是个很经典的后台管理系统的容器页面,这里分为上下结构,上面一般放些系统LOGo、 登录的用户信息,还有一些小功能等等。然后下面又分为左右结构,左边就是我们的导航菜单,右边那一块儿是我们将来所有的业务页面存放的地方

    ② 上下结构布局好说,下面左右结构我们采用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="shrinkMenu" 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.state.COMmon.isCollapse      }
    ,      set(val) {
            this.$store.commit('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实现展开和收起搜索功能

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


    若转载请注明出处: element 实现导航栏收起展开功能及思路
    本文地址: https://pptw.com/jishu/609449.html
    vue报错"vue-cli-service‘不是内部或外部命令,也不是...”的解决办法 安装nvm node版本管理器的操作方法(vue2.x迁移vue3.x)

    游客 回复需填写必要信息