当前位置: 首页 > news >正文

eCharts.js使用心得

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

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

option = {
                backgroundColor: '#f0f0f0',
                animation: false,
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross',
                        label: {
                            backgroundColor: '#283b56'
                        }
                    }
                },
                legend: {
                    data:legendData
                },
                toolbox: {
                    show: true,
                    feature: {
                        dataView: {readOnly: false},
                        saveAsImage: {}
                    }
                },
                dataZoom: {
                    show: true,
                    start: 0,
                    end: 100
                },
                xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data: (function (){
                            var now = new Date();
                            var res = [];
                            var len = 100;
                            while (len--) {
                                res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
                                now = new Date(now - 1000 * cycle);
                            }
                            return res;
                        })()
                    },
                yAxis: [
                    {
                        type: 'value',
                        scale: true,
                        boundaryGap: [0, '100%'],
                        name: unit,
                        splitLine: {
                            show: true
                        }
                    }
                ],
                series: (function(){
                    var serie = [];
                    for(i=0; i<testData.length; i++){
                        var item = {
                            name: testData[i].name,
                            type: 'line',
                            showSymbol: false,
                            data: testData[i].data
                        }
                        serie.push(item);
                    }
                    return serie;
                })()
            };

二、初始化实例

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

三、setOption

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

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

eoUnit.id = eoVal;
eoUnit.name =  eoText;
eoUnit.data = eoData;
testData.push(eoUnit);
legendData.push(eoText);

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

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

myChart.setOption(optiondel, true);

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

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

//开始
timer1 = setInterval(leftTimeFun,1000);//剩余时长
timer = setInterval(monitorFun,1000 * cycle);//监控频率
//停止
clearInterval(timer);
clearInterval(timer1);

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

//监测函数
            function monitorFun(){
                var fdgal = $("#fdgd").val();
                $.ajax({
                    type:"post",
                    url: "aaaaa.action", 
                    async:false, 
                    timeout:1000,
                    data:{"aaaaList":aassList,"aaddid":ssssVal},
                    traditional: true,
                    dataType: "json", 
                    success: function(data){
                        var jsonData = eval("("+data+")");
                        var rightP = $(".datacol p");
                        for(i=0; i<testData.length; i++){
                            testData[i].showSymbol = false;
                            for (var j = 0; j < jsonData.length; j++){
                               if(jsonData[j].moId == testData[i].id){
                                    testData[i].data.shift();
                                    if(jsonData[j].value==""){
                                        testData[i].data.push(barData[i]);
                                        $(rightP[i]).text(barData[i]);
                                    }else{
                                        testData[i].data.push(jsonData[j].value);
                                        $(rightP[i]).text(jsonData[j].value);
                                    }
                               }
                           }
                        }
                    }
                });
                axisData = (new Date()).toLocaleTimeString().replace(/^\D*/,'');
                myChart.setOption({
                    legend: {
                        data:legendData
                    },
                    xAxis: {
                        data: (function (){
                            var now = new Date();
                            var res = [];
                            var len = 100;
                            while (len--) {
                                res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
                                now = new Date(now - 1000 * cycle);
                            }
                            return res;
                        })()
                    },
                    series: (function(){
                        var serie = [];
                        for(i=0; i<testData.length; i++){
                            var item = {
                                name:testData[i].name,
                                type: 'line',
                                showSymbol: false,
                                data:testData[i].data
                            }
                            serie.push(item);
                        }
                        return serie;
                    })()
                });
                option.xAxis.data.shift();
                option.xAxis.data.push(axisData);
                cycleCount -= cycle;
                if(cycleCount < 0){
                    pause();
                }
            }

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

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

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

转载于:https://www.cnblogs.com/sysg/p/7229733.html

相关文章:

  • ABAP POH和POV事件中 获得屏幕字段的值
  • Hive优化(2)之系统评估reduce数为1的MR Job优化
  • RecycleView + SwipeRefreshLayout 实现下拉刷新和底部自动加载
  • hive中间接实现不等值连接
  • python之字符编码
  • Hadoop计算文件大小
  • 在Oracle中利用SQL_TRACE跟踪SQL的执行
  • Linux添加/删除用户和用户组
  • Hive优化(3)之随机数避免数据倾斜
  • Angular2学习(一)
  • hive优化(4)之mapjoin和union all避免数据倾斜
  • hive cli
  • Hive优化(5)之选择合适的map数
  • C++ 文件操作(CFile类)
  • Hadoop MapReduce:详解Shuffle过程
  • 收藏网友的 源程序下载网
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 2017-08-04 前端日报
  • Android系统模拟器绘制实现概述
  • Flannel解读
  • js作用域和this的理解
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • npx命令介绍
  • Object.assign方法不能实现深复制
  • PAT A1092
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Redis学习笔记 - pipline(流水线、管道)
  • SpriteKit 技巧之添加背景图片
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 手机端车牌号码键盘的vue组件
  • 数组的操作
  • 项目管理碎碎念系列之一:干系人管理
  • 用jquery写贪吃蛇
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何在招聘中考核.NET架构师
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​香农与信息论三大定律
  • "无招胜有招"nbsp;史上最全的互…
  • #AngularJS#$sce.trustAsResourceUrl
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (3)nginx 配置(nginx.conf)
  • (BFS)hdoj2377-Bus Pass
  • (HAL库版)freeRTOS移植STMF103
  • (八)Spring源码解析:Spring MVC
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)docker:Dockerfile构建容器运行jar包