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 相关文章推荐
js parseInt(&quot;08&quot;)未指定进位制问题
Jun 19 Javascript
jQuery中after的两种用法实例
Jul 03 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
Javascript基础知识(一)核心基础语法与事件模型
Sep 29 Javascript
iscroll.js滚动加载实例详解
Jul 18 Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 Javascript
JS如何实现手机端输入验证码效果
May 13 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
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异常处理技术,顶级异常处理器
2012/06/13 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
微信小程序之蓝牙的链接
2017/09/26 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python内存读写操作示例
2018/07/18 Python
详解Python 切片语法
2019/06/10 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python 自定义装饰器实例详解
2019/07/20 Python
详解Python中namedtuple的使用
2020/04/27 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
模具专业毕业生自荐书范文
2014/02/19 职场文书
高中语文课后反思
2014/04/27 职场文书
医院搬迁方案
2014/06/14 职场文书
2014年校长工作总结
2014/12/11 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
python实现监听键盘
2021/04/26 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python