【二】ECharts----【异步加载数据】

目录

零.前言

一.异步加载数据

1.1简介

1.1.1一个使用$.get()获取json数据并加载的例子

1.2数据的动态更新【重要】

1.2.1一个使用random随机生成的动态更新

完整代码如下:

二.加载中动画

零.前言

【一】ECharts----【基本概念、基本实例】-CSDN博客

一.异步加载数据

1.1简介

ECharts的数据设置通常借助setOption方法实现,如果需要异步加载数据,可以使用JQuery等工具在异步获取数据后通过setOption填入数据和配置项就行

1.1.1一个使用$.get()获取json数据并加载的例子

在这里,我们使用“菜鸟教程”的一个json数据:

地址https://www.runoob.com/static/js/echarts_test_data.json

json数据内容如下:

{
    "data_pie" : [
    {"value":235, "name":"视频广告"},
    {"value":274, "name":"联盟广告"},
    {"value":310, "name":"邮件营销"},
    {"value":335, "name":"直接访问"},
    {"value":400, "name":"搜索引擎"}
    ]
}

我们使用如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
</head>
<body>
    <!-- 创建一个DOM容器 -->
    <div id="myecharts" style="width: 800px;height: 400px;border: 2px solid;"></div>
    <script>
        var MyEcharts = echarts.init(document.getElementById("myecharts"));
        $.getJSON("JS\\myjson.json",function(data){
            console.log(data)
            MyEcharts.setOption({
                series:[
                    {
                        name:'来源',
                        type:'pie',
                        radius:'55%',
                        data:data.data_pie
                    }
                ]
            })
        });
    </script>
</body>
</html>

效果:

1.2数据的动态更新【重要

ECharts数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单

所有数据的更新都通过setOption实现,我们只需要定时获取数据再使用setOption填入数据即可

至于图表如何更新,ECharts会自动识别并选择合适的方式更新!!

1.2.1一个使用random随机生成的动态更新

  • 我们先创建基本变量用来存储:“Y轴[data]数据”、“X轴[date]数据”、“now[date]数据
        var base = +new Date(2024,4,21);
        // 一天多少毫秒
        var oneDay = 24 * 3600 * 1000;
        var date = [];
        
        // 随机生成数据
        var data = [Math.random() * 150];
        var now = new Date(base)
  • 接下来,我们创建一个名为:“addData”的函数,用来实时更新数据
        function addData(flag){
            // 字符串拼接
            now = [now.getFullYear(),now.getMonth()+1,now.getDate()].join("/");
            date.push(now);
            data.push((Math.random() - 0.4) * 10 + data[data.length-1]);

            if(flag){
                // 如果是更新状态,每次删除列表第一个数据
                date.shift();
                data.shift();
            }
            now = new Date(+new Date(now) + oneDay);
        }
  • 之后,我们需要先调用几次这个“addData”函数,用来生成足够的样本点,用来绘图,如果不先调用而直接进行数据更新是错误的,因为此时数据列表都是空的,没有办法进行实时更新(在更新的同时我们也删除了数据)
        for(let i = 1;i < 100;i++){
            addData();
        }
  • 然后我们创建一个“option”变量,用来规定设置图表的一些参数
        var 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”函数,创建一个定时器,用来定时更新数据
        setInterval(function(){
            addData(true);
            myChart.setOption({
                xAxis:{
                    data:date
                },
                series:[{
                    data:data
                }]
            });
        },500);
  • 最后,我们只需要示例化一个EChart对象,并且对这个ECharts对象设置图表参数即可完成动态展示了
        var myChart = echarts.init(document.getElementById("myecharts"));
        myChart.setOption(option);

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
</head>
<body>
    <!-- 创建一个DOM容器 -->
    <div id="myecharts" style="width: 800px;height: 400px;border: 2px solid;"></div>
    <script>
        var base = +new Date(2024,4,21);
        // 一天多少毫秒
        var oneDay = 24 * 3600 * 1000;
        var date = [];
        
        // 随机生成数据
        var data = [Math.random() * 150];
        var now = new Date(base)

        function addData(flag){
            // 字符串拼接
            now = [now.getFullYear(),now.getMonth()+1,now.getDate()].join("/");
            date.push(now);
            data.push((Math.random() - 0.4) * 10 + data[data.length-1]);

            if(flag){
                // 如果是更新状态,每次删除列表第一个数据
                date.shift();
                data.shift();
            }
            now = new Date(+new Date(now) + oneDay);
        }

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

        var 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);

        var myChart = echarts.init(document.getElementById("myecharts"));
        myChart.setOption(option);
    </script>
</body>
</html>

效果:

二.加载中动画

如果异步加载需要一段时间等待,我们可以添加loading效果,ECharts默认提供一个加载动画:“showLoading()显示加载动画”、“hideLoading()隐藏加载动画

为此我们可以搭配“setTimeout”方法实现一个流畅的加载完毕后显示内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.5.0/echarts.min.js"></script>
</head>
<body>
    <!-- 创建一个DOM容器 -->
    <div id="myecharts" style="width: 800px;height: 400px;border: 2px solid;"></div>
    <script>
        var MyEcharts = echarts.init(document.getElementById("myecharts"));
        MyEcharts.showLoading();
        setTimeout("myfunction()",3000)
        function myfunction(){
            MyEcharts.hideLoading();
            $.getJSON("JS\\myjson.json",function(data){
                console.log(data)
                MyEcharts.setOption({
                    series:[
                        {
                            name:'来源',
                            type:'pie',
                            radius:'55%',
                            data:data.data_pie
                        }
                    ]
                })
            });
        }
    </script>
</body>
</html>

效果:

加载完毕后:

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是洋洋a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值