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

news2024/12/25 8:54:16

目录

零.前言

一.异步加载数据

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>

效果:

加载完毕后:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锐捷网络闪耀高博会:智慧教育数字基座引领教育数字化新浪潮

4月15日,第61届中国高等教育博览会(简称“高博会”)在福州盛大开幕,在这次教育高端装备展示、教学改革成果交流、校企云集的行业盛会上,围绕构建智慧教育数字基座,锐捷网络携全场景智慧教育方案亮相,极简以太全光网、高校桌面云、5G多网融合等创新方案纷纷登场,吸引了众多观众驻…

护眼台灯什么牌子好一点?护眼灯合格的品牌分享

护眼台灯作为对抗视力挑战的一种方法&#xff0c;逐渐赢得了众多家长的青睐。这些台灯利用尖端光学技术&#xff0c;发出柔和且无刺激的照明&#xff0c;有助于保护眼睛不受伤害。它们不但可以调节亮度和色温&#xff0c;打造一个舒适且自然的阅读环境&#xff0c;还有利于提升…

PHP命令执行漏洞CVE-2024-1874复现

CVE-2024-1874 PHP命令执行漏洞 影响版本 Affected versions < 8.1.28 < 8.2.18 < 8.3.5 Patched versions 8.1.28 8.2.18 8.3.6 POC 创建一个文件test.php <?php $descriptorspec [STDIN, STDOUT, STDOUT]; $proc proc_open(["test.bat", "\&…

zabbix监控内容

一、自定义监控内容 1.1 在客户端自定义key 1.1.1 查看当前用户 1.1.2 创建zabbix监控项配置文件&#xff0c;启动服务 1.1.3 服务端验证测试 1.2 在Web界面创建自定义监控模板 1.2.1 创建模板 1.2.2 创建应用集&#xff08;用于管理监控项&#xff09; 1.2.3 创建监控项 1.2.4…

C++|模板进阶(非类型模板参数+特化)

目录 一、非类型模板参数 二、模板特化 2.1函数模板特化 2.2类模板特化 2.2.1全特化 2.2.2偏特化 三、模板不支持分离编译 四、模板优缺点 一、非类型模板参数 在模板初阶中&#xff0c;所学习的模板的参数是类型形参&#xff0c;但其实还有非类型形参。 类型形参&am…

电子温度计不准需要怎么处理?

电子温度计不准需要怎么处理&#xff1f; 首选将温度计完全浸入温度为0℃左右的水中&#xff0c;使温度计指示值与0℃相等&#xff0c;拿出测量待测物的温度。其次将温度计完全浸入温度为100℃左右的水中&#xff0c;使温度计指示值与100℃相等&#xff0c;拿出测量待测物的温…

【算法学习】线段树基础版

一 线段树 1.概念 线段树可以理解为一个二叉树&#xff0c;如果是利用线段树求区间的和&#xff0c;那么每个结点的权值维护的是结点所维护区间的和&#xff0c;再将该区间一分为二&#xff0c;分别交由左右儿子维护。 拿区间1 - 4的和来举例子&#xff0c; 根结点维护的是区…

BRC铭文NFT铸造质押挖矿系统开发运营

区块链技术的不断演进与应用拓展&#xff0c;为数字资产领域带来了更多可能性。BRC铭文NFT铸造质押挖矿系统的开发与运营&#xff0c;将为用户提供一种全新的数字资产体验&#xff0c;下文将介绍其版/需求方案/逻辑项目。 1. 系统概述 BRC铭文NFT铸造质押挖矿系统旨在结合区块…

【GEE】分块处理以降低内存压力

代码链接 https://code.earthengine.google.com/6f3876f55be5280369750c9e38c8ffce?noloadtrue 函数介绍 2.1 vecSplitByRowCol(table.geometry(), Row, Col)函数 2.2 getSmallVec(featureCollection, i, table.geometry())函数 3. 完整代码 Map.centerObject(table, 5);…

拼多多面试题——力扣版测试用例纠错

最近我看到力扣上这个题目&#xff0c;用了三种方法&#xff0c;结果没有一种正确&#xff0c;我就纳闷儿了&#xff0c;为何总有一个测试用例过不了&#xff0c;结果我发现这个测试用例确实有问题啊。。。。。 题目&#xff1a; 表&#xff1a;Logs ----------------------…

图片hover放大效果

实现效果&#xff1a;一张图片&#xff0c;鼠标放上去时&#xff0c;出现放大效果 非常简单&#xff0c;两个关键词&#xff1a;hover和transform 对应的代码结构如下图 框架背景&#xff1a; Tips: transform结合不同的参数可以实现元素的位移、旋转、缩放 如果有任何疑问或…

ELK日志系统的搭建

文章目录 简介软件准备安装JDK下载Elasticsearch软件修改配置信息创建ElasticSearch运行用户、启动服务添加防火墙策略ElasticSearch-Head插件安装 安装Kibana下载软件包修改配置启动服务 安装Logstash安装包下载安装服务配置修改配置pipeline流水线服务配置文件 启动服务 全流…

HttpMessageConverter

一、HttpMessageConverter HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为&#xff1a;HTTP消息转换器。该接口下提供了很多实现类&#xff0c;不同的实现类有不同的转换方式。 1.1 什么是HTTP消息 HTTP消息其实就是HTTP协议。HTTP协议包括请求协议和响应协议。…

opencv android 使用笔记

目录 获取app路径&#xff1a; 下载&#xff1a;OpenCV-android-sdk cmakelist配置&#xff1a; 头文件路径&#xff1a; 编译报错&#xff1a;clang: error: linker command failed with exit code 1 (use -v to see invocation) 读取图片例子 保存mp4 获取app路径&am…

这个禁止打字,只能发语音的AI Native产品,成了硅谷最火的社交软件

最近&#xff0c;一款AI驱动的社交应用AirChat在硅谷引发了热切关注&#xff0c;这款产品背后的AI技术可以实时将语音转录为文字&#xff0c;并支持多语言翻译。综合来看&#xff0c;AirChat的火可以持续多久呢&#xff1f; 过去一周&#xff0c;硅谷线上到处充斥着求链接的声音…

团队如何异地共享文件?

在当今全球化的办公环境中&#xff0c;团队成员往往分散在不同的地理位置上。为了更好地协同工作&#xff0c;团队之间需要快速、安全地共享文件。本文将介绍一种名为“团队异地共享文件”的解决方案&#xff0c;它能够帮助团队成员在不同地点方便地共享文件&#xff0c;提高工…

抽象工厂模式设计实验

【实验内容】 楚锋软件公司欲开发一套界面皮肤库&#xff0c;可以对 Java 桌面软件进行界面美化。为了保护版权&#xff0c;该皮肤库源代码不打算公开&#xff0c;而只向用户提供已打包为 jar 文件的 class 字节码文件。用户在使用时可以通过菜单来选择皮肤&#xff0c;不同的…

【计算机网络】MAC地址简介

MAC&#xff08;Medium Access Control&#xff09;&#xff0c;即媒介访问控制&#xff0c;是计算机网络通信中的重要概念。每个NIC&#xff08;Network Interface Card&#xff09;&#xff0c;即网络适配器&#xff0c;都具有独自且不变的MAC地址&#xff08;烧录的&#xf…

AI写作助手:一键智能改写文章质量高

无论是自媒体人写作文章、还是企业撰写宣传资料&#xff0c;文字都是表达思想和传递信息的重要介质。然而&#xff0c;有时候我们在工作中可能会遇到写作困难&#xff0c;或者想要对文章进行一定程度的改写以增加独特性和质量。而在这样的背景下&#xff0c;智能改写文章成为了…

jasypt组件死锁bug案例分享

事故描述 1、上午9.55发布了一个Apollo动态配置参数&#xff1b; 2、片刻后&#xff0c;服务器接口开始出现大量的超时告警&#xff0c;似乎是某资源被耗尽不足分配&#xff1b; 3、正值业务请求高峰的上午十点&#xff08;平台上午10点会有一些活动会拉一波用户流量&#x…