1. 程式人生 > 實用技巧 >【ECharts】04 資料互動

【ECharts】04 資料互動

ECharts 非同步載入資料

ECharts 通常資料設定在 setOption 中,如果我們需要非同步載入資料,可以配合 jQuery等工具,在非同步獲取資料後通過 setOption 填入資料和配置項就行。

ECharts 通常資料設定在 setOption 中,如果我們需要非同步載入資料,可以配合 jQuery等工具,在非同步獲取資料後通過 setOption 填入資料和配置項就行。

json 資料結構:

{
    "data_pie" : [
    {"value":235, "name":"視訊廣告"},
    {"value":274, "name":"聯盟廣告"},
    {"value":310, "name":"郵件營銷"},
    {"value":335, "name":"直接訪問"},
    {"value":400, "name":"搜尋引擎"}
    ]
}

菜鳥官網的介面傳輸失敗,就只能拉下來放本地了

介面就寫本地檔案的位置進行獲取:

<div id="main" style="width: 600px;height:400px;"></div>

<!-- JQuery & ECharts -->
<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></
script> <script type="text/javascript"> // 基於準備好的dom,初始化echarts例項 var myChart = echarts.init(document.getElementById('main')); // https://www.runoob.com/static/js/echarts_test_data.json $.get('data.json', function (data) { myChart.setOption({ series : [ { name:
'訪問來源', type: 'pie', // 設定圖表型別為餅圖 radius: '55%', // 餅圖的半徑,外半徑為可視區尺寸(容器高寬中較小一項)的 55% 長度。 data:data.data_pie } ] }) }, 'json') </script>

載入效果設定:

如果非同步載入需要一段時間,我們可以新增 loading 效果,ECharts 預設有提供了一個簡單的載入動畫。

只需要呼叫 showLoading 方法顯示。資料載入完成後再呼叫 hideLoading 方法隱藏載入動畫:

var myChart = echarts.init(document.getElementById('main'));
myChart.showLoading();  // 開啟 loading 效果
$.get('https://www.runoob.com/static/js/echarts_test_data.json', function (data) {
    myChart.hideLoading();  // 隱藏 loading 效果
    myChart.setOption({
        series : [
            {
                name: '訪問來源',
                type: 'pie',    // 設定圖表型別為餅圖
                radius: '55%',  // 餅圖的半徑,外半徑為可視區尺寸(容器高寬中較小一項)的 55% 長度。
                data:data.data_pie
            }
        ]
    })
}, 'json')

動態渲染:

<div id="main" style="width: 600px;height:400px;"></div>

<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>

<script type="text/javascript">
    var base = +new Date(2014, 9, 3);
    var oneDay = 24 * 3600 * 1000;
    var date = [];

    var data = [Math.random() * 150];
    var now = new Date(base);

    function addData(shift) {
        now = [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/');
        date.push(now);
        data.push((Math.random() - 0.4) * 10 + data[data.length - 1]);

        if (shift) {
            date.shift();
            data.shift();
        }

        now = new Date(+new Date(now) + oneDay);
    }

    for (var i = 1; i < 100; i++) {
        addData();
    }

    option = {
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: date
        },
        yAxis: {
            boundaryGap: [0, '50%'],
            type: 'value'
        },
        series: [
            {
                name:'成交',
                type:'line',
                smooth:true,
                symbol: 'none',
                stack: 'a',
                areaStyle: {
                    normal: {}
                },
                data: data
            }
        ]
    };

    setInterval(function () {
        addData(true);
        myChart.setOption({
            xAxis: {
                data: date
            },
            series: [{
                name:'成交',
                data: data
            }]
        });
    }, 500);

    // 基於準備好的dom,初始化echarts例項
    var myChart = echarts.init(document.getElementById('main'));
    myChart.setOption(option)
</script>