最近刚刚做了一个项目,需求是使用eCharts实现实时监控,可以动态的增加和删除数据,可以全屏展示,趁着现在还没忘干净,整理一下使用过程中出现的问题和经验。可能有分析的不到位的地方,不喜勿喷!

一、图表的配置,配置方面没什么好说的,参数官方文档中都有解释,时间轴的生成也是参考的官方实例,只是增加了一个刷新频率cycle参数,项目中要求的。

  1. option = {
  2. backgroundColor: '#f0f0f0',
  3. animation: false,
  4. tooltip: {
  5. trigger: 'axis',
  6. axisPointer: {
  7. type: 'cross',
  8. label: {
  9. backgroundColor: '#283b56'
  10. }
  11. }
  12. },
  13. legend: {
  14. data:legendData
  15. },
  16. toolbox: {
  17. show: true,
  18. feature: {
  19. dataView: {readOnly: false},
  20. saveAsImage: {}
  21. }
  22. },
  23. dataZoom: {
  24. show: true,
  25. start: 0,
  26. end: 100
  27. },
  28. xAxis: {
  29. type: 'category',
  30. boundaryGap: false,
  31. data: (function (){
  32. var now = new Date();
  33. var res = [];
  34. var len = 100;
  35. while (len--) {
  36. res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
  37. now = new Date(now - 1000 * cycle);
  38. }
  39. return res;
  40. })()
  41. },
  42. yAxis: [
  43. {
  44. type: 'value',
  45. scale: true,
  46. boundaryGap: [0, '100%'],
  47. name: unit,
  48. splitLine: {
  49. show: true
  50. }
  51. }
  52. ],
  53. series: (function(){
  54. var serie = [];
  55. for(i=0; i<testData.length; i++){
  56. var item = {
  57. name: testData[i].name,
  58. type: 'line',
  59. showSymbol: false,
  60. data: testData[i].data
  61. }
  62. serie.push(item);
  63. }
  64. return serie;
  65. })()
  66. };

二、初始化实例

  1. var myChart = echarts.init(document.getElementById('line-main'));

三、setOption

  1. if (option && typeof option === "object") {
  2. myChart.setOption(option, true);
  3. }

四、下面来说动态增加和删除折线,说是删除图表中的元素,其实本质上都是对数据的操作。

  1. eoUnit.id = eoVal;
  2. eoUnit.name = eoText;
  3. eoUnit.data = eoData;
  4. testData.push(eoUnit);
  5. legendData.push(eoText);

所谓增加折线,其实就是向数组里添加一条数据。

删除也是,将数组中对应的数据删除掉,但是要多执行一步操作

  1. myChart.setOption(optiondel, true);

如果不执行这个的话,图表上的监控折线虽然停止了运动,但是之前的线会留在图上,所以这步操作是必须的,也是值得注意的一点。

五、开始和停止监控,这块没什么好讲的,就是用到了两个定时器,一个负责记录剩余时长,一个用来执行刷新函数。

  1. //开始
  2. timer1 = setInterval(leftTimeFun,1000);//剩余时长
  3. timer = setInterval(monitorFun,1000 * cycle);//监控频率
  4. //停止
  5. clearInterval(timer);
  6. clearInterval(timer1);

六、监控函数,这部分功能应该算是核心功能了(有些变量名改了),其实这个也是对数组的操作,通过定时器定时执行,每次从服务器获取一条最新数据插入到数组,从数组弹出最早的一条数据,形成一个队列式操作,展现在图表上就是实时监控的效果,setOption 中设置的都是有所改变的项,每操作一次,都要 setOption 。

  1. //监测函数
  2. function monitorFun(){
  3. var fdgal = $("#fdgd").val();
  4. $.ajax({
  5. type:"post",
  6. url: "aaaaa.action",
  7. async:false,
  8. timeout:1000,
  9. data:{"aaaaList":aassList,"aaddid":ssssVal},
  10. traditional: true,
  11. dataType: "json",
  12. success: function(data){
  13. var jsonData = eval("("+data+")");
  14. var rightP = $(".datacol p");
  15. for(i=0; i<testData.length; i++){
  16. testData[i].showSymbol = false;
  17. for (var j = 0; j < jsonData.length; j++){
  18. if(jsonData[j].moId == testData[i].id){
  19. testData[i].data.shift();
  20. if(jsonData[j].value==""){
  21. testData[i].data.push(barData[i]);
  22. $(rightP[i]).text(barData[i]);
  23. }else{
  24. testData[i].data.push(jsonData[j].value);
  25. $(rightP[i]).text(jsonData[j].value);
  26. }
  27. }
  28. }
  29. }
  30. }
  31. });
  32. axisData = (new Date()).toLocaleTimeString().replace(/^\D*/,'');
  33. myChart.setOption({
  34. legend: {
  35. data:legendData
  36. },
  37. xAxis: {
  38. data: (function (){
  39. var now = new Date();
  40. var res = [];
  41. var len = 100;
  42. while (len--) {
  43. res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
  44. now = new Date(now - 1000 * cycle);
  45. }
  46. return res;
  47. })()
  48. },
  49. series: (function(){
  50. var serie = [];
  51. for(i=0; i<testData.length; i++){
  52. var item = {
  53. name:testData[i].name,
  54. type: 'line',
  55. showSymbol: false,
  56. data:testData[i].data
  57. }
  58. serie.push(item);
  59. }
  60. return serie;
  61. })()
  62. });
  63. option.xAxis.data.shift();
  64. option.xAxis.data.push(axisData);
  65. cycleCount -= cycle;
  66. if(cycleCount < 0){
  67. pause();
  68. }
  69. }

有不明确的地方可以交流一下,随时恭候,不对的地方也请指正,共同进步。

前端交流群,群文件提供大量文档、书籍和资料。期待你的加入!群号:127768464

前端交流群,群文件提供大量文档、书籍和资料。期待你的加入!群号:127768464

eCharts.js使用心得的更多相关文章

  1. echarts.js使用心得--demo

    首先要感谢一下我的公司,因为公司需求上面的新颖(奇葩)的需求,让我有幸可以学习到一些好玩有趣的前端技术. 废话不多时 , 直接开始. 第一步: 导入echarts.js文件 下载地址:http://e ...

  2. 百度ECHARTS 饼图使用心得 处理data属性

    做过CRM系统的童鞋应该都或多或少接触过hicharts或者echarts等数据统计插件.用过这两款,个人感觉echarts的画面更好看.至于功能,只有适合自己的才是最好的. 今天来说说我使用echa ...

  3. echarts3 -arcgis echarts.js修改

     在echarts.js中修改修改 clone 方法    其中 source instance of Array 修改为Object.prototype.toString.call(source)  ...

  4. 前端数据可视化echarts.js使用指南

    一.开篇 首先这里要感谢一下我的公司,因为公司需求上面的新颖(奇葩)的需求,让我有幸可以学习到一些好玩有趣的前端技术,前端技术中好玩而且比较实用的我想应该要数前端的数据可视化这一方面,目前市面上的数据 ...

  5. echarts.js 做图表的插件

    <scripttype="text/javascript"src="{uiurl()}echarts/echarts.js"></script ...

  6. echarts.js(图表插件)2.0版会导致 ZeroClipboard.js(复制插件)失效,3.0版未知。

    解决方法:ZeroClipboard.js先于echarts.js加载.

  7. 图表工具--- ECharts.js学习(一) 简单入门

    ECharts.js学习(一) 在项目开发的时候,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库.具体有哪几种可以看: 前端开发者常用的9个JavaScript图表库 EChar ...

  8. 关于echarts.js 柱形图

    echarts.js官网: http://www.echartsjs.com/index.html 这是我所见整理最详细echarts.js 柱形图博客: https://blog.csdn.net/ ...

  9. 前端数据可视化echarts.js

    一.echarts.js的优势与总体情况 echarts.js作为国内的IT三巨头之一的百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点 1.容易使用 echarts.js的官方文档比 ...

随机推荐

  1. SVN仓库连同版本信息迁移新服务器的步骤

    SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bi ...

  2. SpringBoot如何集成Jedis

    添加jedis依赖 在项目pom.xml文件中添加依赖 <!-- 添加jedis依赖 --> <dependency> <groupId>redis.clients ...

  3. 处理IIS 255错误,和相关信息

    不知不觉已经注册博客一年多了,当初看见博客园的大神,自己也想像他们一样多写一些有用的,结果,,,不言而喻.在这里又感慨了一下,进入正题了.. 最近在公司服务器接触的比较多, 遇到了一个255 的问题 ...

  4. [Java][Servlet] Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]

    Background: Servlet version 3.1(3.0之后就有了@WebServlet注解) Error 严重: Failed to destroy end point associa ...

  5. maven配置好了之后再次开机找不到命令

    问题: 昨天还运行的好好的,今天突然又报错了, mvn不是内部或外部命令,也不是可运行程序或批处理文件 原因: 环境配置问题,windows7和windows10稍微有一点不一样,对照下面配置看哪里不 ...

  6. Java之美[从菜鸟到高手演变]之智力题【史上最全】 (转)

    原文地址:http://blog.csdn.net/zhangerqing/article/details/8138296 PS:在一次偶然的机会中,发现了这篇文章.希望大家能开动脑经. 智力题,每个 ...

  7. 从零开始的全栈工程师——js篇(js的异步)

    js中的异步 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任 ...

  8. rem与em的区别

    这两个单位都是相对元素 rem相对根元素 em相对于父级元素

  9. angular的多个模块执行 angular里 字符串与对象的互转

    1.disable : true ,禁用 2.$timeout 计时器 $interval.cancel(timer); 3.app.run();  可以不使用控制器就开启数据,但适合$rootsco ...

  10. 关于jqeury中attr()和prop()方法

    在平时工作中老会被一样的问题困住,浪费时间,这里做一个简要笔记. 在使用jquery给元素设置属性的时候,如果是一般的div,p等正常元素设置属性的话,使用attr()足以,但是在给拥有checked ...