1. 程式人生 > >eCharts.js使用心得

eCharts.js使用心得

series end 獲取 count 變量名 下使用 unshift tip sss

前端交流群,群文件提供大量文檔、書籍和資料。期待你的加入!群號:127768464

前端交流群,群文件提供大量文檔、書籍和資料。期待你的加入!群號:127768464

最近剛剛做了一個項目,需求是使用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

eCharts.js使用心得