echarts学习笔记之图表自适应问题详解


Posted in Javascript onNovember 22, 2017

前言

为了直观查看公司服务器各个进程占用的内存动态情况,我使用echarts进行数据可视化,具体的实现过程按下不表。

最后实现的效果如图:

echarts学习笔记之图表自适应问题详解

然后问题就来了,因UI采用了Bootstrap响应式框架,所以除了图表之外其他都是响应式。当窗口缩小后,就会发生很尴尬的出界事件。

如图:

echarts学习笔记之图表自适应问题详解

针对这个问题,刚开始的解决思路及方法:把echart容器的宽度设置为100%;

<div class="col-sm-12 row" id="logic1_node" style="width:100%;height:700px"></div>

这样之后依然存在问题:页面初始的宽度是多少,canvas宽度就是多少,之后不会再变化。

便尝试通过jsDOM操作,强行令canvas的宽度为100%,however too young too simple!

调整浏览器宽度发现,canvas画布的宽度是随之变化的,然而画布里面的图表内容却像被挤压在一起的馅饼,模糊扭曲了。

echarts学习笔记之图表自适应问题详解

到这里细心的同学可以发现,echart图表一旦绘制成功,内容就不会再变化。所以对于echart图表,其"响应式"应该是可以随着窗口调整不断被重新绘制,不是简单的调整宽高。

到echart官网看了Example,发现官网的实例都具有响应式功能,确实不是单纯的宽度改变,是每次调整后图表是重新绘制。猜想echart源码里应该有resize这个API,打开调试器,打开echart源码,Ctrl+F,果然找到了。

echarts学习笔记之图表自适应问题详解

再仔细查看官方文档:

echarts学习笔记之图表自适应问题详解

echart图表本身是提供了一个resize的函数的。

于是当浏览器发生resize事件的时候,让其触发echart的resize事件,重绘canvas。(也可以通过其他事件触发)

echarts学习笔记之图表自适应问题详解

附:Echarts 页面多图自适应的解决办法

网上看到有不少人使用Echarts抽象出来的框架,实现自适应的效果代码:window.onresize  = option.chart.resize() ,  这个代码基本是官网上的window.onresize = myCharts.resize();的翻版。

但在实际的应用中一个页面可能会有好几个Echarts图表,而使用window.onresize = option.chart.resize() ,加载页面图表后,页面上只有一个图表会根据浏览器的变化而自适应。如果要是页面上的图表都要自适应。则需要将resize事件叠加在不同的图上面,使用一下代码可以实现。

window.addEventListener("resize", function () {

           option.chart.resize();

         });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
JavaScript实现带标题的图片轮播特效
May 20 Javascript
jQuery实现自动调整字体大小的方法
Jun 15 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
jquery实现input框获取焦点的方法
Feb 06 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 #Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 #Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 #Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 #Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
Nov 22 #Javascript
浅谈Angular 中何时取消订阅
Nov 22 #Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 #Javascript
You might like
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
28个JS验证函数收集
2010/03/02 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
js有序数组的连接问题
2013/10/01 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
微信小程序自定义组件
2017/08/16 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
事业单位绩效考核实施方案
2014/03/27 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
离职信范本
2015/06/23 职场文书