echarts图表设置宽度100%结果为100px的解决办法

作者:cxy-Study 时间:2024-04-18 09:50:19 

当外层div盒子设置宽度为100%时,可echarts渲染出来宽度只有100px,这种情况大多数echarts所在的div设置了display:none,获取不到外部盒子的宽度。

这里可以通过echarts源码获取宽度的行为来解释

究其原因就是出现在了图表设置了display:none属性上(属性含义:不为被隐藏的对象保留其物理空间,关闭元素的显示,并且所有后代元素不显示)

我们通过浏览器打断点可以看清楚echarts在计算图表宽度这部分的逻辑$("#chart").css("width",$("#chart").width());,("#chart")指的是当前绘制图表的div,获取当前元素的宽度后把固定宽度赋值给图表。

但是为什么我们宽度设置了100%,结果变为了100px? 这里上源码可以解释:

echarts图表设置宽度100%结果为100px的解决办法

源码解读:当echarts绘制表格(也就是执行init方法)计算宽度的时候,由于初始化图表时外层div盒子的属性为display:none,所以无法获取到盒子的clientWidth(可视化宽度),而parseInt(stl.width,10)将宽度100%转换成了100(这里的stl.width,就是外层的div的样式中的width属性,因为我们初始时设置了100%,所以这里可以获取到),所以计算出的图表宽度为100px。

(源码这里没有获取到clientWidth(可视化宽度,因为display:none属性,无法获取到,就会将设置的width:100%转换称100px))

解决方法:外部div盒子必须要在init初始化前就已经存在于dom树中(也就是已经挂载)。

不要 在display:none的情况下(包括v-show、v-if后面的逻辑值是false时),一上来就初始化(init)echart。只要一初始化,就会执行源码计算出echart的宽度。

如何确保dom已经存在再去初始化呢:这里可以监视display属性(一般在项目中是通过v-if或者v-show,所以这里监视的是掌控盒子是否显示的变量 ),在监视中(watch),要配合nextTick方法使用,这样才能完全确保初始化之前,外部盒子已经存在于dom树中。(一般初始化过程是写在nextTick中)

附:echarts宽度如何设为百分比

var width = $("#tabitem2").width()*0.45;
$("#mainPay").css("width", width);
$("#mainDetail").css("width", width);
$("#main").css("width", width);
$("#mainItem").css("width", width);
$("#mainBehavior").css("width", width);
$("#mainBehaviorPay").css("width", width);
$("#mainDepartment").css("width", width);
$("#mainDoctor").css("width", width);

var myChartPay = echarts.init(document.getElementById('mainPay'));
var myChartDetail = echarts.init(document.getElementById('mainDetail'));
var myChartDepartment = echarts.init(document.getElementById('mainDepartment'));
var myChart = echarts.init(document.getElementById('main'));
var myChartItem = echarts.init(document.getElementById('mainItem'));
var myChartDoctor = echarts.init(document.getElementById('mainDoctor'));
var myChartBehavior = echarts.init(document.getElementById('mainBehavior'));
var myChartBehaviorPay = echarts.init(document.getElementById('mainBehaviorPay'));

说明:

这里 有个 div class=tabitems ,将宽度设置为 0.45倍的它。

然后对八个图表设置宽度为width。因为 tabitem2的宽度是动态的,所以每次随着屏幕宽度改变,都会重新计算这个宽度然后赋值。

来源:https://blog.csdn.net/m0_67108146/article/details/126442989

标签:echarts,图表宽度,100%
0
投稿

猜你喜欢

  • 教你用Python写安卓游戏外挂

    2023-10-21 17:43:29
  • CSS分栏布局的方法:绝对定位和浮动

    2009-04-30 13:10:00
  • 纯CSS在Firefox模拟text-overflow: ellipsis效果

    2009-03-17 12:49:00
  • JavaScrpt的面向对象全面解析

    2024-04-23 09:20:40
  • MySQL下使用Inplace和Online方式创建索引的教程

    2024-01-18 11:28:18
  • 成功的用户界面的八个特性[译]

    2009-04-20 20:36:00
  • http请求405错误方法不被允许的解决 (Method not allowed)

    2022-10-12 11:12:10
  • Python改变对象的字符串显示的方法

    2022-11-10 17:16:12
  • 通过案例解析python鸭子类型相关原理

    2022-05-03 12:38:57
  • 机器学习python实战之手写数字识别

    2021-06-29 03:07:07
  • Go语言基础go install命令使用示例详解

    2024-04-26 17:25:48
  • MySQL如何统计一个数据库所有表的数据量

    2024-01-23 20:07:14
  • Bootstrap风格的zTree右键菜单

    2024-05-02 17:32:42
  • 用python写一个定时提醒程序的实现代码

    2021-04-12 12:25:45
  • Python中的with...as用法介绍

    2023-03-30 11:17:19
  • 《设计网事》前言

    2009-07-15 17:19:00
  • 对python中Json与object转化的方法详解

    2022-11-13 23:42:35
  • ASP存储过程开发应用详解第1/2页

    2011-04-07 11:16:00
  • python3+django2开发一个简单的人员管理系统过程详解

    2022-06-01 08:04:01
  • Python恋爱小助手之必拿下

    2023-09-22 13:09:00
  • asp之家 网络编程 m.aspxhome.com