【vue + echarts】图表自适应缩放(跟随浏览器的窗口缩放,项目侧边栏折叠后的窗口缩放),图表重绘
创始人
2024-02-22 09:27:29
0

在这里插入图片描述
效果图:
在这里插入图片描述

先清楚两个东西,浏览器窗口的缩放和项目侧边栏折叠后窗口的缩放,这两个是不一样的
第一种,浏览器窗口缩放后,当前窗口会放大了或者缩小了,这时会走浏览器缩放的代码部分,
第二种,而项目侧边栏折叠后窗口的缩放,虽然项目里面的窗口缩放了,但是,浏览器的窗口并没有发生变化,所有这时不会走浏览器缩放的代码部分,
详细说一下第二种情况:
在这里插入图片描述
当侧边栏折叠后,
在这里插入图片描述
可以发现,这两个图的大小都是左边侧边栏加右边的内容部分,总体的大小没有发生变化,所以它不会走浏览器的缩放方法

但是他们两个之间相对发生了缩放,
解决方法:

第一种情况:

浏览器窗口缩放,这种很好解决,
第一种方法:

window.addEventListener('resize', () => {this.myChart.resize()
})

第二种方法:

window.onresize = () => {this.myChart.resize()
}

一般都是用第一种 addEventListener 去监听缩放

第二种情况:

重点就是第二种情况,浏览器没有缩放,侧边栏和内容相对缩放
这种情况我也看到了很多解决方法,但都有利有弊吧
第一种方法:
一个插件,但是我用了感觉哈,如果你是一个图表,马马虎虎可以用,如果有二三四五六个图表,那页面就卡成ppt了,懂得都懂
插件名好像是element-resize-detector,自己去搜索改怎么用,我就不说了
第二种方法:
如果你是用vue+admin的后台管理模板的话,里面有写好的方法,可以自己抠出来用,有点难,牵扯的东西太多了
第三种方法:
目前我所用的方法,单个图表或者多个图表都可用
首先侧边栏折叠的代码
这个官网都有案例的,直接拿过来修改一下就好了,

    // 折叠/展开侧边栏collapseClk() {if (this.isCollapse) {this.isCollapse = falsethis.collapseClass = 'el-icon-s-fold'} else {this.isCollapse = truethis.collapseClass = 'el-icon-s-unfold'}this.$store.commit('IS_COLLAPSE', this.isCollapse)},

注: 如果折叠的时候没有动画,那就是侧边栏的宽度没有设置,

// 侧边栏折叠宽度
.el-menu-vertical-demo:not(.el-menu--collapse) {width: 200px;min-height: 400px;
}

这里主要是获取折叠或者展示时的状态, this.$store.commit(‘IS_COLLAPSE’, this.isCollapse) 将它存储到全局中,然后在其他页面监听是否折叠来判断图表是否resize
在页面中应用:
a.vue

  watch: {'$store.state.isCollapse': {handler(newVal, oldVal) {setTimeout(() => {this.myChart.resize()}, 500)},},},mounted() {this.myChart = this.$echarts.init(document.getElementById('emain'))this.myChart.showLoading({ text: '加载中', color: '#fee', maskColor: 'rgba(0 ,0 ,0 ,0.2 )', zlevel: 0 })this.charts()},methods:{charts(){xxxxx().then((data) => {//获取接口返回值this.myChart.clear()this.myChart.setOption(this.option)this.myChart.setOption({xAxis: {data: xxx,},series: [{data: xxx,},],})this.myChart.hideLoading()window.addEventListener('resize', () => {this.myChart.resize()})})}}

如果是多个图表的话也是一样的,循环resize就可以了

  watch: {'$store.state.isCollapse': {handler(newVal, oldVal) {setTimeout(() => {for (var i = 0; i < charts.length; i++) {charts[i].resize()}}, 500)},},},

ok,没了,哪里写的不对还请指出,谢谢,下期再见! ! !

相关内容

热门资讯

美剧《林肯律师 第四季》定档0... 剧名:《林肯律师 第四季》 又名:依法犯法 / 下流正义 类型:剧情 / 悬疑 / 惊悚 / 犯罪 ...
协调便利与安全、平衡进口与出口... 央视网消息:在1月17日举行的全国海关工作会议上,海关总署署长介绍,“十五五”开局之年,全国海关将推...
跨越语言的法律桥梁:解析跨境法... 在全球化日益深入的今天,人员、资本和信息的跨境流动已成为常态。随之而来的是跨国商业合作、国际诉讼、海...
丰顺县一村(社区)一法律顾问2... 日前,丰顺县2025年一村(社区)一法律顾问工作总结暨2026年工作部署会在县司法局召开。会议总结2...
地产定向支持政策持续加码 滨江... “十五五”规划建议明确提出推动房地产行业高质量发展的战略导向,在规划指引下,一系列旨在稳市场、惠民生...
《条例》落笔生香 书香漫卷新疆 《全民阅读促进条例》(以下简称《条例》)将于2月1日起正式实施,意味着“读书”这件事有了更坚实的制度...
美股点金丨美股新财报季平淡中开... 随着美股去年四季度财报季拉开帷幕,三大股指最终均录得周线下跌,美国总统特朗普对美联储、金融业和格陵兰...
原创 私... 国资基金研究中心法律服务动态 1 近日,骄英医疗器械(上海)有限公司(简称“骄英医疗”)宣布完成A+...
原创 5... 2026年1月16日,对于韩国前任总统尹锡悦而言,是一个不寻常的日子。在这一天,他因涉嫌妨碍逮捕而被...