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 相关文章推荐
JQuery小知识
Oct 15 Javascript
js读取本地excel文档数据的代码
Nov 11 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
Dec 11 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
jquery实现瀑布流效果分享
Mar 26 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
js实现选中页面文字将其分享到新浪微博
Nov 05 Javascript
JS简单实现String转Date的方法
Mar 02 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
Node.js API详解之 timer模块用法实例分析
May 07 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
我的论坛源代码(一)
2006/10/09 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python进行两个表格对比的方法
2018/06/27 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
Python基于execjs运行js过程解析
2020/11/27 Python
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
安全生产网格化管理实施方案
2014/03/01 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
让子弹飞观后感
2015/06/11 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL