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 相关文章推荐
SWFObject Flash js调用类
Jul 08 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
在jQuery中处理XML数据的大致方法
Aug 14 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
vue双向绑定的简单实现
Dec 22 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
angular1.x ui-route传参的三种写法小结
Aug 31 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
博士208HAF收音机实习报告
2021/03/02 无线电
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
php错误级别的设置方法
2013/06/17 PHP
php递归json类实例
2014/12/02 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Python-openCV开运算实例
2020/07/05 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
Python tkinter实现日期选择器
2021/02/22 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
GMP办公室主任岗位职责
2014/03/14 职场文书
教师节主持词开场白
2015/05/29 职场文书
催款函怎么写
2015/06/24 职场文书
运动会宣传稿100字
2015/07/23 职场文书