vue—菜单栏自适应折叠

vue—菜单栏自适应折叠

思路:我这里使用的是el-menu导航菜单,监听页面宽度的改变,来改变导航菜单的折叠和展开。



一、在使用了el-menu的页面下,通过watch监听宽度变化。

1.在方法里面定义

代码如下(示例):

mounted() {  
  var _this = this;  
  window.onresize = function () {  
    // 定义窗口大小变更通知事件  
   _this.screenWidth = document.documentElement.clientWidth; //窗口宽度  
  };  
},  

2.在watch上里面引用

代码如下(示例):

  watch: {
    screenWidth: function (val) {
      if (val < 1400) {
        if (this.time) {
          clearInterval(this.time);
        }
        this.time = setTimeout(() => {
          this.time = null;
          console.log("折叠");
        }, 100);
      } else {
        if (this.time) {
          clearInterval(this.time);
        }
        this.time = setTimeout(() => {
          this.time = null;
          console.log("展开");
        }, 100);
      }
    },
  }, 

3.在data里定义变量

代码如下(示例):

  data() {
    return {
      screenWidth: document.documentElement.clientWidth, //屏幕宽度
      time: null,
    };
  },

二、在el-menu中定义:collapse=“isCollapse”,isCollapse为false是展开,为true是折叠

三、将isCollapse的值用仓库的值来定义,折叠和展开使用mutations来改变值


总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了el-menu的使用,element提供了大量组件,但是要怎么使用需要我们自己去发掘。

### ElementUI 侧边菜单缩小宽度自适应解决方案 当使用ElementUI框架开发Vue应用时,如果遇到侧边菜单栏折叠展开导致右侧内容区宽度变化而ECharts图表无法自动调整的情况,可以采取以下方法处理[^1]。 #### 方法一:手动触发 ECharts 图表重绘 通过监听侧边栏的状态改变事件,在每次状态切换后调用`chart.resize()`函数强制刷新图表尺寸: ```javascript // 假设 chart 是已经初始化好的 echarts 实例对象 this.$refs.sideMenu.collapse ? this.chart.resize() : this.chart.resize(); ``` 这种方法简单直接,适用于只需要针对特定组件做响应的应用场景。 #### 方法二:利用 Vue 的生命周期钩子 可以在 `watch` 中监控侧边栏的折叠/展开属性的变化,并在此基础上执行相应的操作: ```javascript export default { data(){ return{ isCollapse:false, // 控制侧边栏收缩与否的数据项 } }, watch:{ 'isCollapse'(newVal){ setTimeout(() => { this.chart && this.chart.resize(); }, 200); } } } ``` 这里增加了延时器是为了确保DOM更新完成后再去调整图表大小,避免因同步问题造成的显示异常. #### 方法三:创建 Mixin 复用逻辑 为了提高代码可维护性和复用率,建议将上述逻辑抽象成一个mixin文件供多个页面引入使用。这样不仅简化了单个视图内的业务逻辑编写工作量,还便于后期统一管理和修改公共行为。 ```javascript const resizeMixin = { methods: { handleResize() { this.chart && this.chart.resize(); } }, mounted() { const that = this; this.$root.bus.$on('collapse', (collapsed) => { setTimeout(function () { that.handleResize() }, 200); }); } }; ``` 以上三种方式都可以有效解决由于侧边栏变动引起的内容区布局错乱以及嵌套其中的可视化控件未能及时适配新空间的问题。具体选择哪种取决于项目的实际需求和个人偏好.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值