在开发过程中遇到这样个问题:

  利用bootstrap中的tab栏,每当点击tab栏的导航时,echats仅仅只渲染第一个tab的内容,切换tab时,echats图表不显示。

其html代码为:

 <div class="col-xs-6" style="padding:10px;">
<ul class="nav nav-tabs" id="myTab1">
<li><a href="##" style="font-weight: 700;color:black;">访客年龄统计</a></li>
<li class="active"><a href="#home11" data-id="0">年</a></li>
<li><a href="#home12" data-id="1">月</a></li>
<li><a href="#home13" data-id="2">日</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="home11">
<!-- echarts容器 -->
<div class="chart">
<div id="main_11" style="height:400px;"></div>
</div>
</div>
<div class="tab-pane" id="home12">
<div class="chart">
<div id="main_12" style="height:400px;"></div>
</div>
</div>
<div class="tab-pane" id="home13">
<div class="chart">
<div id="main_13" style="height:400px;"></div>
</div>
</div>
</div>
</div>

js代码为:

 var myChart11 = echarts.init(document.getElementById('main_11'));
var myChart12 = echarts.init(document.getElementById('main_12'));
var myChart13 = echarts.init(document.getElementById('main_13'));
// 指定图表的配置项和数据
option = {
title: {
text: '',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c}'
},
legend: {
left: 'left',
data: ['全部', '男', '女']
},
xAxis: {
type: 'category',
name: 'x',
splitLine: { show: false },
data: ['2017-1', '2017-2', '2017-3', '2017-4', '2017-5', '2017-6', '2017-7', '2017-8', '2017-9']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
yAxis: {
type: 'log',
name: 'y'
},
series: [
{
name: '全部',
type: 'line',
data: [15, 53, 29, 27, 36, 86, 71, 168, 66]
},
{
name: '男',
type: 'line',
data: [12, 22, 16, 8, 16, 32, 6, 68, 26]
},
{
name: '女',
type: 'line',
data: [3, 32, 14, 16, 18, 52, 17, 32, 12]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart11.setOption(option);
myChart12.setOption(option);
myChart13.setOption(option);

  此代码的结果为上边图片所展示的效果,经过查找之后发现“月”和“日”所对应的echats图表的宽度为0,根本就没有画在所对应的盒子中,也就是说根本就没有渲染。

  后来经过查资料发现了一个方法可以解决这个问题,那便是给tab栏中的导航栏注册“shown.bs.tab”事件,在事件里边让每个echats渲染一遍。

  var arr=[];
var myChart11 = echarts.init(document.getElementById('main_11'));
var myChart12 = echarts.init(document.getElementById('main_12'));
var myChart13 = echarts.init(document.getElementById('main_13'));
// 指定图表的配置项和数据
option = {
title: {
text: '',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c}'
},
legend: {
left: 'left',
data: ['全部', '男', '女']
},
xAxis: {
type: 'category',
name: 'x',
splitLine: { show: false },
data: ['2017-1', '2017-2', '2017-3', '2017-4', '2017-5', '2017-6', '2017-7', '2017-8', '2017-9']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
yAxis: {
type: 'log',
name: 'y'
},
series: [
{
name: '全部',
type: 'line',
data: [15, 53, 29, 27, 36, 86, 71, 168, 66]
},
{
name: '男',
type: 'line',
data: [12, 22, 16, 8, 16, 32, 6, 68, 26]
},
{
name: '女',
type: 'line',
data: [3, 32, 14, 16, 18, 52, 17, 32, 12]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart11.setOption(option);
arr.push(myChart11);
myChart12.setOption(option);
arr.push(myChart12);
myChart13.setOption(option);
arr.push(myChart13);
// 给tab导航按钮注册事件,让其渲染
$('#myTab1 li a').on('shown.bs.tab', function (e) {
for (var i = 0; i < arr.length; i++) {
arr[i].resize();
}
});
// 当浏览器窗口大小出现变化时,重新渲染
$(window).resize(function () {
for (var i = 0; i < arr.length; i++) {
arr[i].resize();
}
});

  仅仅只是添加了一个数组,将要渲染的盒子方法添加到数组里边,当事件被触发的时候,通过遍历这个数组,将这些方法再调用一次,这样就可以解决以上问题。

关于在bootstrap的tab栏中渲染echats图表,切换tab时echats不显示问题的更多相关文章

  1. java中Double类数字太大时页面正常显示而不要用科学计数法

    /** * 当浮点型数据位数超过10位之后,数据变成科学计数法显示.用此方法可以使其正常显示. * @param value * @return Sting */ public static Stri ...

  2. tab栏切换效果案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Android 常用UI控件之TabHost(5)Tab栏在底部且在最上层也不盖tab页

    tab栏在底部 <TabHost android:id="@android:id/tabhost" android:layout_width="match_pare ...

  4. 面向对象版Tab栏切换

    <div class="wrapper" id="wrapper"> <ul class="tab" id="t ...

  5. JS高级——面向对象方式解决tab栏切换问题

    注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...

  6. bootstrap如何去除自带的样式----导航栏中的菜单实现平滑的过渡到对应的菜单区域-------动态跟换模态框中的内容

    问题1:如何去除bootstap中css中自带的overflow:hidden这个样式 今天遇见在bootstap中轮播图上的  附带图  片不能够显示出来,图片始终有一部分的高度  被隐藏了 后来通 ...

  7. Vue项目中实现tab栏和步骤条的数据联动

    也就是tab栏切换步骤条随之变化 <template>   <div>     <!-- 面包屑导航  -->     <el-breadcrumb sepa ...

  8. 小程序开发顶部TAB栏和侧边分类点击

    先上一个效果图: 根据这个效果图我来说内容. 首先是顶部tab栏 效果实现依靠的是一个组件scroll-view.这个组件很有意思,可以多层嵌套,当然它的属性也很多. 这里主要用的是scroll-x, ...

  9. tab栏切换的特殊效果

    在实际的开发过程中,我们可能会遇到这种需求,如下图 左边是三个tab栏,右边是显示内容的div,当鼠标滑到坐标的tab上时,给它一个高亮显示,让它对应的内容在右边的div中显示出来,当鼠标移出的时候把 ...

随机推荐

  1. 全栈框架——MEAN

    MEAN: MongoDB - Express - AngularJs - Node.js MongoDB 是一个面向文档的. NoSQL 类型的数据库.MongoDB 颠覆了传统的基于表的数据存储方 ...

  2. 我的C++笔记(Hello World)

    其实在学习C++之前,是因为自己想学AI,但是发现好多AI教程都是使用C语言来进行讲解的,真心感觉到C真的计算机的基础语言行业的共同语言.至于为什么是C++,主要是C++是从C语言演变而来的,兼容C, ...

  3. JS面向对象(2)——原型链

    原型链用于ECMAScript的继承.其思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.说人话,我们知道,一个构造函数Subtype,其原型对象有一个指向构造函数的指针,这是联系构造函数和 ...

  4. nginx获取经过层层代理后的客户端真实IP(使用正则匹配)

    今天帮兄弟项目搞了一个获取客户端真实IP的问题,网上这种问题很多,但是对于我们的场景都不太合用,现把我的解决方案share给大家,如有问题,请及时指出. 场景: 在请求到达后端服务之前,会经过层层代理 ...

  5. [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)

    传送门 Background 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的木牌上写着"Poetic Island&q ...

  6. 慎用PHP的unset、array_unique方法

    背景 在日常工作中,可能会经常遇到一些PHP的代码场景,需要我们去除数组中的某个项,通常会直接调用unset方法,但是如果用得不妥,会给自己挖坑 1.实操 以下使用具体例子进行证明假设有数组如下值: ...

  7. Django用户认证(四)自定义认证Customizing authentication

    原文:https://www.cnblogs.com/linxiyue/p/4061044.html 扩展已有的用户模型Extending the existing User model 有两种方法来 ...

  8. ZOJ 2315 New Year Bonus Grant

    New Year Bonus Grant Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Or ...

  9. redis-ubuntu环境下安装

    ubuntu环境下联网安装 进去系统后,首先修改root的密码 命令 sudo passwd 设置新的密码:XXX 切换为root操作 $ wget http://download.redis.io/ ...

  10. Spring自带字符编码过滤器

    http://blog.csdn.net/youngage/article/details/51356821 http://blog.csdn.net/daelly/article/details/5 ...