首页 > 其他分享 >echarts图由于容器隐藏导致图表不显示问题解决办法

echarts图由于容器隐藏导致图表不显示问题解决办法

时间:2024-05-15 15:19:59浏览次数:14  
标签:解决办法 初始化 title 容器 图表 宽度 drawChart echarts

开发过程中常常会遇到echarts图由于容器隐藏导致图表不显示问题,最简单的办法就是给容器元素加上宽度和高度

容器加上固定的宽度和高度

<div id="res" style="height: 450px;width:1200px"></div>

然而在实际开发中某些场景下,要求图表宽度100%显示,而计算容器的宽度有时又会十分的麻烦。

延时初始化

使用bootstrap的tab组件模拟echarts图表容器显示隐藏情况

<link href="./plugins/bootstrap-5.1.3/css/bootstrap.min.css" rel="stylesheet" />
<script src="./plugins/echarts.min.js"></script>
<script src="./plugins/bootstrap-5.1.3/js/bootstrap.bundle.min.js"></script>

<div class="card mt-2" id="results">
  <div class="card-header p-2">
    <ul class="nav nav-pills">
      <li class="nav-item">
        <a class="nav-link active" data-bs-toggle="tab" data-bs-target="#aaa_con" style="cursor: pointer" onclick="handleChart('aaa')">aaa</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-bs-toggle="tab" data-bs-target="#bbb_con" style="cursor: pointer" onclick="handleChart('bbb')">bbb</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" data-bs-toggle="tab" data-bs-target="#ccc_con" style="cursor: pointer" onclick="handleChart('ccc')">ccc</a>
      </li>
    </ul>
  </div>
  <div class="card-body p-1" style="overflow-x: auto">
    <div class="tab-content">
      <div class="tab-pane fade show active" id="aaa_con" role="tabpanel" style="min-height: 500px">
        <div id="aaares" style="height: 450px"></div>
      </div>
      <div class="tab-pane fade" id="bbb_con" role="tabpanel" style="min-height: 500px">
        <div id="bbbres" style="height: 450px"></div>
      </div>
      <div class="tab-pane fade" id="ccc_con" role="tabpanel" style="min-height: 500px">
        <div id="cccres" style="height: 450px"></div>
      </div>
    </div>
  </div>
</div>

<script>
  function drawChart(domId, title) {
    const chartDom = document.getElementById(domId);
    const myChart = echarts.init(chartDom);
    const option = {
      title: {
        text: title,
      },
      xAxis: {
        type: "category",
        data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
      },
      yAxis: {
        type: "value",
      },
      series: [
        {
          data: [150, 230, 224, 218, 135, 147, 260],
          type: "line",
        },
      ],
    };

    option && myChart.setOption(option);
  }

  drawChart("aaares", "aaa");
  drawChart("bbbres", "bbb");
  drawChart("cccres", "ccc");

  function handleChart(title) {
    console.log(title);
  }
</script>

打开页面发现后面的两个tab页中的图表未显示。F12可以看到两个图表确实初始化了,只是width为0,原因应该是图表初始化时容器未显示,初始化宽度为0.

因此试着在初始化前修改容器的宽度,理想情况为修改为100%后宽度自适应,但图表容器的宽度初始化为100px

const chartDom = document.getElementById(domId);
chartDom.style.width = "100%";//图表容器宽度初始化为100
//chartDom.style.width = "1200px";//同图表容器宽度和高度预定义的显示效果
const myChart = echarts.init(chartDom);

 

其根本的问题应该是:tab切换需要时间,如果在tab页切换完成之前,echarts图表已完成初始化,那容器的宽度就会初始化为0,试着让图表延时初始化,看下能不能解决问题

  drawChart("aaares", "aaa");
  // drawChart("bbbres", "bbb");
  // drawChart("cccres", "ccc");

  function handleChart(title) {
    setTimeout(() => {
      drawChart(title + "res", title);
    }, 500);
  }

结果如下:所有的图表初始化的宽度都相同了

延时办法的也有局限性:需要多次初始化图表。

具体选择哪种方法,可根据实际情况选择。

标签:解决办法,初始化,title,容器,图表,宽度,drawChart,echarts
From: https://www.cnblogs.com/caroline2016/p/18193924

相关文章

  • Echarts设置饼状图保证你看的明明白白
    简单的饼状图<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>ECharts-动画</title>......
  • echarts折线鼠标悬浮时只显示了一条线的数据
    项目中对悬浮的值formatter进行了唯一给值,并没有针对每一个进行赋值问题代码大致为:formatter:(params)=>{return`${params[0].name}<br/>${params[0].值1}${params[0].值2}:${params[0].value==0?"-":Number(params[0].value).toLoca......
  • 界面组件DevExpress Blazor UI v23.2亮点 - 图表组件全新升级
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v23.2版本了,此版本进一步增强了图表组......
  • 关于vue3中使用echarts设置tooltip的type为axis不显示的问题
    因为vue3中的数据对象是用的proxy监听的,要取值需要用value等方法取出来,解决方法:使用markRaw让echarts从监听对象变成普通对象!在Vue3中,markRaw是一个用于告诉Vue的响应性系统不要对某个对象进行转换或追踪其响应性的函数。当你有一个对象,并且你确定你不需要它成为响应性......
  • 【VMware vSphere】存储提供程序中I/O 筛选器状态显示为脱机以及证书已到期的解决办法
    存储提供程序是由VMware提供或由第三方通过vSphereAPIsforStorageAwareness(VASA)开发的软件组件。存储提供程序也可以称为VASA提供程序。存储提供程序可与包含外部物理存储和存储抽象的各种存储实体(例如 vSAN 和 VirtualVolumes)集成。存储提供程序也可以支持软件......
  • Matplot3D for JAVA 【V5.0】发布 :一个纯JAVA开发的数学科学数据可视化组件,JAVA 三维
    ​ Matplot3DforJAVA概述 在数据科学和工程领域,数据可视化是理解和交流复杂信息的关键工具。如果您是一位Java开发者,寻找一个强大的、本地化的三维图形绘图库,那么Matplot3DforJAVA(V5.0)值得你关注。该组件旨在为Java开发者提供类似于Python中Matplotlib的三维绘图功能,让Jav......
  • ECharts自定义提示框浮层内容
    因为提示框内容支持字符串模板和回调函数两种形式字符串模板模板变量有{a},{b},{c},{d},{e},分别表示系列名,数据名,数据值等等,但是trigger属性为axis的时候它数据条就很多了,就可以用{a0},{a1},{a2}这样子去拿数据跟数组下标一样(官网有详细示例)示例:在`option`中的`tooltip`里边写......
  • MySQL同步故障:“ Slave_SQL_Running:No“ 两种解决办法
    进入slave服务器,运行: ​mysql>showslave status\G            .......              Relay_Log_File:localhost-relay-bin.000535               Relay_Log_Pos:21795072       Relay_Ma......
  • JS实现图表日期分类按色显示
    预想要达成的效果图: 关键步聚: js代码如下function(){vardate=newDate(this);if(date.getDay()==0||date.getDay()==6){return"<fontcolor='red'>"+date.getDate()+"</font>"}else{returndate.getD......
  • [转帖]【MySQL】字段名与关键字冲突解决办法
    https://www.jianshu.com/p/50e59feb3e83   首先,不推荐使用MySQL的关键词来作为字段名,但是有时候的确没有注意,或者因为之前就这么写了,没办法,那怎么办呢?方法1,改字段名,改了肯定就没问题了。这个就不细说了。方法2,使用引号`来处理。  下面就详细的说明一下怎样使用方法......