javaScript蓝桥杯-----全球新冠疫情数据统计

news2024/11/25 14:46:14

目录

  • 一、介绍
  • 二、准备
  • 三、⽬标
  • 四、代码
  • 五、完成


一、介绍

新冠疫情席卷全球,在此期间有很多免费的 API 和⽹站为⼈们提供了各个国家疫情数据的查询功能,这些免费公开的数据体现出了互联⽹作为信息媒介的优越性,帮助全球⼈⺠更好的了解⼀线疫情信息。
本题请实现⼀个可以对各个国家的新冠疫情数据统计的⻚⾯。

二、准备

开始答题前,需要先打开本题的项⽬代码⽂件夹,⽬录结构如下:

├── css
│ └── style.css
├── effect.gif
├── index.html
└── js
├── axios.min.js
├── covid-data.json
├── echarts.min.js
└── vue.min.js

其中:

  • css/style.css 是样式⽂件。
  • index.html 是主⻚⾯。
  • js/axios.min.js 是 axios ⽂件。
  • js/vue.min.js 是 vue2.x ⽂件。
  • js/echarts.min.js 是 echarts ⽂件。
  • js/covid-data.json 是⻚⾯所⽤到的新冠数据。
  • effect.gif 是⻚⾯最终的效果图。

在浏览器中预览 index.html ⻚⾯效果如下:
在这里插入图片描述

三、⽬标

请在 index.html ⽂件中补全代码,具体需求如下:

  1. 在组件加载时利⽤ axios 请求地址为 ./js/covid-data.json (必须使⽤该路径请求,否则可能会请求不到数据) ⽂件中的数据。并将所有国家名称在 select 标签下的 option 元素进⾏渲染(保留默认选项 “Select Country”),效果如下:
    在这里插入图片描述
    covid-data.json 数据参数说明:
    在这里插入图片描述
  2. 当⽤户改变 select 筛选器的选择时,根据⽤户的选择改变⻚⾯中展示的国家名以及确诊和死亡⼈数数据。如果⽤户没有选择任何国家,则展示默认值 0 和默认标题 “请选择国家”。以选择法国为
    例:
    在这里插入图片描述
  3. ⻚⾯底部的 ECharts 图表希望显示各个国家的累计确诊⼈数,请修改 initChart 函数的内容,
    使得图表 x 轴数据为国家简称,y 轴数据为累计确诊⼈数,效果如下:
    在这里插入图片描述
    最终效果可参考⽂件夹下⾯的 gif 图,图⽚名称为 effect.gif(提示:可以通过 VS Code 或者浏览器预览gif 图⽚)。
    在这里插入图片描述

四、代码

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>全球新冠疫情数据统计</title>
    <meta
      name="viewport"
      content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"
    />
    <link rel="stylesheet" type="text/css" href="css/style.css" />
  </head>

  <body>
    <div id="app">
      <header>
        <div>全球新冠疫情数据统计</div>
      </header>
      <main>
        <!-- TODO: 请修改以下代码实现不同国家的数据展示功能 -->
        <div class="title">
          <h2>请选择国家</h2>
        </div>
        <div class="boxes">
          <div class="box1">
            <h3>确诊</h3>
            <div class="number">
              <span class="font-bold">新增:</span>
              0
            </div>
            <div class="number">
              <span class="font-bold">总计:</span>
              0
            </div>
          </div>
          <div class="box2">
            <h3>死亡</h3>
            <div class="number">
              <span class="font-bold">新增:</span>
              0
            </div>
            <div class="number">
              <span class="font-bold">总计:</span>
              0
            </div>
          </div>
        </div>
        <select>
          <option value="">Select Country</option>
          <!-- 请在此渲染所有国家选项 -->
        </select>
        <div id="chart" style="width: 100%; height: 50vh"></div>
      </main>
    </div>
  </body>

  <script src="js/axios.min.js"></script>
  <script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
  <script src="js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
  <script>
    var vm = new Vue({
      el: "#app",
      methods: {
        // TODO: 请修改该函数代码实现题目要求
        initChart() {
          // 初始化图表
          this.chart = echarts.init(document.getElementById("chart"));
          this.chartOptions = {
            title: {
              text: "全球感染人数前30国家累计确诊人数统计",
              x: "center",
            },
            tooltip: {
              trigger: "axis",
              axisPointer: {
                type: "shadow",
                label: {
                  show: true,
                },
              },
            },
            // 设置x轴数据
            xAxis: {
              // 这里需要显示国家名称缩写,因为有些国家的全称太长,会导致界面不美观
              data: ["US", "IN", "FR", "DE", "BR", "JP", "KR"],
              axisLabel: {
                show: true,
                interval: 0,
              },
            },
            yAxis: {
              type: "value",
              name: "确诊数量",
            },
            // 设置y轴数据
            series: [
              {
                data: [
                  100856162, 44680355, 39560482, 37446795, 36362366, 29489769,
                  29299166,
                ],
                type: "bar",
                itemStyle: {
                  normal: {
                    color: "#a90000",
                  },
                },
              },
            ],
          };
          // 调用此方法设置 echarts 数据
          this.chart.setOption(this.chartOptions);
        },
      },
      // TODO: 请在此添加代码实现组件加载时数据请求的功能
      mounted() {
        this.initChart();
      },
    });
  </script>
</html>

js/covid-data.josn

[
  {
    "Country": "United States of America",
    "CountryCode": "US",
    "NewConfirmed": 96911,
    "NewDeaths": 1158,
    "TotalConfirmed": 100856162,
    "TotalDeaths": 1094003
  },
  {
    "Country": "India",
    "CountryCode": "IN",
    "NewConfirmed": 175,
    "NewDeaths": 0,
    "TotalConfirmed": 44680355,
    "TotalDeaths": 530707
  },
  {
    "Country": "France",
    "CountryCode": "FR",
    "NewConfirmed": 23207,
    "NewDeaths": 163,
    "TotalConfirmed": 39560482,
    "TotalDeaths": 163418
  },
  {
    "Country": "Germany",
    "CountryCode": "DE",
    "NewConfirmed": 36145,
    "NewDeaths": 307,
    "TotalConfirmed": 37446795,
    "TotalDeaths": 162021
  },
  {
    "Country": "Brazil",
    "CountryCode": "BR",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 36362366,
    "TotalDeaths": 693981
  },
  {
    "Country": "Japan",
    "CountryCode": "JP",
    "NewConfirmed": 91904,
    "NewDeaths": 223,
    "TotalConfirmed": 29489769,
    "TotalDeaths": 57952
  },
  {
    "Country": "Korea (South)",
    "CountryCode": "KR",
    "NewConfirmed": 78575,
    "NewDeaths": 54,
    "TotalConfirmed": 29299166,
    "TotalDeaths": 32355
  },
  {
    "Country": "Italy",
    "CountryCode": "IT",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 25143705,
    "TotalDeaths": 184642
  },
  {
    "Country": "United Kingdom",
    "CountryCode": "GB",
    "NewConfirmed": 509,
    "NewDeaths": 0,
    "TotalConfirmed": 24366197,
    "TotalDeaths": 213997
  },
  {
    "Country": "Russian Federation",
    "CountryCode": "RU",
    "NewConfirmed": 3040,
    "NewDeaths": 46,
    "TotalConfirmed": 21502402,
    "TotalDeaths": 385927
  },
  {
    "Country": "Turkey",
    "CountryCode": "TR",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 17042722,
    "TotalDeaths": 101492
  },
  {
    "Country": "Spain",
    "CountryCode": "ES",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 13684258,
    "TotalDeaths": 117095
  },
  {
    "Country": "Viet Nam",
    "CountryCode": "VN",
    "NewConfirmed": 72,
    "NewDeaths": 0,
    "TotalConfirmed": 11525408,
    "TotalDeaths": 43186
  },
  {
    "Country": "Australia",
    "CountryCode": "AU",
    "NewConfirmed": 2172,
    "NewDeaths": 30,
    "TotalConfirmed": 11135105,
    "TotalDeaths": 17082
  },
  {
    "Country": "Argentina",
    "CountryCode": "AR",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 9963697,
    "TotalDeaths": 130171
  },
  {
    "Country": "Taiwan, Republic of China",
    "CountryCode": "TW",
    "NewConfirmed": 25005,
    "NewDeaths": 22,
    "TotalConfirmed": 8914351,
    "TotalDeaths": 15321
  },
  {
    "Country": "Netherlands",
    "CountryCode": "NL",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 8569095,
    "TotalDeaths": 22990
  },
  {
    "Country": "Iran, Islamic Republic of",
    "CountryCode": "IR",
    "NewConfirmed": 119,
    "NewDeaths": 3,
    "TotalConfirmed": 7561428,
    "TotalDeaths": 144696
  },
  {
    "Country": "Mexico",
    "CountryCode": "MX",
    "NewConfirmed": 18477,
    "NewDeaths": 98,
    "TotalConfirmed": 7252944,
    "TotalDeaths": 331197
  },
  {
    "Country": "Indonesia",
    "CountryCode": "ID",
    "NewConfirmed": 652,
    "NewDeaths": 13,
    "TotalConfirmed": 6721095,
    "TotalDeaths": 160648
  },
  {
    "Country": "Poland",
    "CountryCode": "PL",
    "NewConfirmed": 693,
    "NewDeaths": 13,
    "TotalConfirmed": 6369442,
    "TotalDeaths": 118546
  },
  {
    "Country": "Colombia",
    "CountryCode": "CO",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 6336660,
    "TotalDeaths": 141881
  },
  {
    "Country": "Austria",
    "CountryCode": "AT",
    "NewConfirmed": 3086,
    "NewDeaths": 4,
    "TotalConfirmed": 5712491,
    "TotalDeaths": 21448
  },
  {
    "Country": "Ukraine",
    "CountryCode": "UA",
    "NewConfirmed": 3243,
    "NewDeaths": 49,
    "TotalConfirmed": 5666050,
    "TotalDeaths": 118739
  },
  {
    "Country": "Portugal",
    "CountryCode": "PT",
    "NewConfirmed": 3883,
    "NewDeaths": 91,
    "TotalConfirmed": 5557941,
    "TotalDeaths": 25805
  },
  {
    "Country": "Greece",
    "CountryCode": "GR",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 5548487,
    "TotalDeaths": 34779
  },
  {
    "Country": "Chile",
    "CountryCode": "CL",
    "NewConfirmed": 1344,
    "NewDeaths": 0,
    "TotalConfirmed": 5045602,
    "TotalDeaths": 63200
  },
  {
    "Country": "Malaysia",
    "CountryCode": "MY",
    "NewConfirmed": 333,
    "NewDeaths": 1,
    "TotalConfirmed": 5027790,
    "TotalDeaths": 36859
  },
  {
    "Country": "Israel",
    "CountryCode": "IL",
    "NewConfirmed": 980,
    "NewDeaths": 7,
    "TotalConfirmed": 4766786,
    "TotalDeaths": 12062
  },
  {
    "Country": "Thailand",
    "CountryCode": "TH",
    "NewConfirmed": 0,
    "NewDeaths": 0,
    "TotalConfirmed": 4723919,
    "TotalDeaths": 33669
  }
]

五、完成

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>全球新冠疫情数据统计</title>
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <link rel="stylesheet" type="text/css" href="css/style.css" />
</head>

<body>
  <div id="app">
    <header>
      <div>全球新冠疫情数据统计</div>
    </header>
    <main>
      <!-- TODO: 请修改以下代码实现不同国家的数据展示功能 -->
      <div class="title">
        <h2>{{resetTitle}}</h2>
      </div>
      <div class="boxes">
        <div class="box1">
          <h3>确诊</h3>
          <div class="number">
            <span class="font-bold">新增:</span>
            {{resetNewConfirmed}}
          </div>
          <div class="number">
            <span class="font-bold">总计:</span>
            {{resetTotalConfirmed}}
          </div>
        </div>
        <div class="box2">
          <h3>死亡</h3>
          <div class="number">
            <span class="font-bold">新增:</span>
            {{resetNewDeaths}}
          </div>
          <div class="number">
            <span class="font-bold">总计:</span>
            {{resetTotalDeaths}}
          </div>
        </div>
      </div>
      <select @change="changeCountry">
        <option value="">Select Country</option>
        <!-- 请在此渲染所有国家选项 -->
        <option v-for="item in countryList" :value="item.Country">{{item.Country}}</option>
      </select>
      <div id="chart" style="width: 100%; height: 50vh"></div>
    </main>
  </div>
</body>

<script src="js/axios.min.js"></script>
<script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
<script>
  var vm = new Vue({
    el: "#app",
    data() {
      return {
        countryList: [],
        indexCountry: ''
      }
    },
    methods: {
      // TODO: 请修改该函数代码实现题目要求
      initChart() {
        // 初始化图表
        this.chart = echarts.init(document.getElementById("chart"));
        this.chartOptions = {
          title: {
            text: "全球感染人数前30国家累计确诊人数统计",
            x: "center",
          },
          tooltip: {
            trigger: "axis",
            axisPointer: {
              type: "shadow",
              label: {
                show: true,
              },
            },
          },
          // 设置x轴数据
          xAxis: {
            // 这里需要显示国家名称缩写,因为有些国家的全称太长,会导致界面不美观
            data: ["US", "IN", "FR", "DE", "BR", "JP", "KR"],
            axisLabel: {
              show: true,
              interval: 0,
            },
          },
          yAxis: {
            type: "value",
            name: "确诊数量",
          },
          // 设置y轴数据
          series: [
            {
              data: [
                100856162, 44680355, 39560482, 37446795, 36362366, 29489769,
                29299166,
              ],
              type: "bar",
              itemStyle: {
                normal: {
                  color: "#a90000",
                },
              },
            },
          ],
        };
        // 调用此方法设置 echarts 数据
        this.chart.setOption(this.chartOptions);
      },
      //获取数据
      async getData() {
        const res = await axios({ url: './js/covid-data.json ' })
        this.countryList = res.data
      },
      //当选择国家时触发
      changeCountry(e) {
        this.indexCountry = this.countryList.find(item => item.Country == e.target.value)
      },
      //重绘图表
      resetData() {
        let keys = []
        let values = []
        //处理x,y轴
        for (item of this.countryList) {
          keys.push(item.CountryCode)
          values.push(item.TotalConfirmed)
        }
        this.chartOptions.xAxis.data = keys
        this.chartOptions.series[0].data = values
        this.chart.setOption(this.chartOptions)
      }
    },
    // TODO: 请在此添加代码实现组件加载时数据请求的功能
    async mounted() {
      this.initChart();
      //获取数据
      await this.getData()
      console.log(this.countryList)
      //重绘图标
      this.resetData()
    },
    computed: {
      resetTitle() {
        return this.indexCountry.Country || '请选择国家'
      },
      resetNewConfirmed() {
        return this.indexCountry.NewConfirmed || 0
      },
      resetTotalConfirmed() {
        return this.indexCountry.TotalConfirmed || 0
      },
      resetNewDeaths() {

        return this.indexCountry.NewDeaths || 0
      },
      resetTotalDeaths() {
        return this.indexCountry.TotalDeaths || 0
      }
    }
  });
</script>

</html>

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

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

相关文章

电路模型和电路定律(3)——“电路分析”

小雅兰期末加油冲冲冲&#xff01;&#xff01;&#xff01; 复习之前的内容&#xff1a; 这样的连接方式是不可以的&#xff1a; 两个电压源&#xff0c;电压值不相同&#xff0c;是不能并联的 两个电流源&#xff0c;电流值不相同&#xff0c;是不能串联的 电流源也不能开…

浅谈Zuul、Gateway

一、Zuul Zuul是通过Servlet来实现的&#xff0c;Zuul通过自定义的ZuulServlet&#xff08;类似于Spring MVC的DispatcherServlet&#xff09;来对请求进行控制(一系列过滤器处理Http请求)。 所有的Request都要经过ZuulServlet的处理&#xff0c;三个核心的方法preRoute(),rou…

时钟频率的配置-DG32

时钟频率的配置-DG32 HXTAL&#xff1a;高速外部时钟&#xff0c;4到32MHz的外部振荡器&#xff0c;可为系统提供精确的主时钟。带有特定频率的晶体必须靠近两个HXTAL的引脚。和晶体连接的外部电阻和电容必须根据所选择的振荡器来调整&#xff1b; LXTAL&#xff1a;低速外部…

chatgpt赋能python:Python开发桌面应用全面介绍

Python开发桌面应用全面介绍 Python是一种非常万能的编程语言&#xff0c;也逐步发展成为一种适用于开发各种桌面应用程序的语言。Python开发桌面应用的优点是它可以快速开发&#xff0c;易于阅读和使用&#xff0c;同时具有很高的可扩展性和可维护性&#xff0c;因此越来越多…

chatgpt赋能python:Python开立方:简单快捷的计算方法

Python开立方&#xff1a;简单快捷的计算方法 如果你是一位程序员或者是一个正在学习编程的初学者&#xff0c;那么你一定会用到Python这个编程语言。Python作为一门多用途的编程语言&#xff0c;它有着简单易学、高效快捷、优雅简洁等优点。同时&#xff0c;在数据分析、人工…

Keras-3-实例2-多分类问题

1. 多分类问题&#xff1a; 1.1 路透社数据集加载 路透社数据集由路透社在1986年发布&#xff0c;包含46个不同的主题&#xff1a;某些主题样本较多&#xff0c;某些较少&#xff0c;但是训练集中每个主题都至少含有10个样本。 from keras.datasets import reuters(train_da…

ViewOverlay-加蒙层真的一种实现方式

一、ViewOverlay能实现什么&#xff1f; 在Android中&#xff0c;ViewOverlay是一个特殊的视图层&#xff0c;可以在一个视图的上方添加和管理附加的视图层&#xff0c;而不会干扰原始视图的布局和交互。它提供了一种方便的方式来在运行时添加、移除或修改视图层&#xff0c;而…

chatgpt赋能python:Python嵌入SEO

Python嵌入SEO Python是一种高级编程语言&#xff0c;由于其简单易学和广泛应用的特点&#xff0c;已经成为了许多工程师的首选语言。随着互联网发展的趋势&#xff0c;现代的SEO已经不再是简单的关键词填充和链接堆积&#xff0c;而是需要更复杂的优化方式&#xff0c;这时候…

Sentinel在k8s部署

一、Sentinel Dashboard在k8s部署 官方jar包下载 由于sentinel dashboard官方没有提供镜像下载&#xff0c;需从sentinel官方下载sentinel dashboard的jar包&#xff0c;这里选择1.8.0进行下载。注意与springboot版本的兼容性。 打镜像并上传自己镜像仓库 在自己项目中添加…

mac(M1)芯片安装Stable-diffusion-webui

背景&#xff1a;听同事说这个都是在GPU上跑的&#xff0c;cpu跑这个比较费劲。我本地mac跑这个&#xff0c;也是为了调试一些相关的插件和api。为了开发方便点。当然确实提吃内存的。 目录 一、Stable-diffusion-webui 项目地址和官方安装方式 二、自己的安装方式 2.1、更…

自定义注解,基于redis实现分布式锁

一、如何实现自定义注解 1.1、注解的基础知识 实现自定义注解其实很简单&#xff0c;格式基本都差不多。也就参数可能变一变。 Retention&#xff1a;取值决定了注解在什么时候生效&#xff0c;一般都是取运行时&#xff0c;也就是RetentionPolicy.RUNTIME。 Target&#xff…

Unreal5 第三人称射击游戏 射击功能实现2

上一篇我们实现了角色射击相关的动画以及切换逻辑&#xff0c;并将武器相关的模型添加到角色身上。 这一篇开始制作武器相关的功能。 制作子弹父类 首先创建一个actor类&#xff0c;命名为BP_Bullet&#xff0c;这个作为子弹的通用父类&#xff0c;在里面创建子弹通用的功能实…

测试相关知识

测试基础知识 1. 测试基本理念2. 软件测试的分类2.1 程序是否运行2.2 测试时间段划分2.3 是否涉及实现2.4 其它测试2.5 当前流程的测试概念 3. 测试设计方法4. 参考书籍 1. 测试基本理念 软件测试的定义&#xff1a;软件测试是使用人工或自动的手段来运行或测定某个软件系统的…

chatgpt赋能python:Python年龄换算:如何根据Python版本算出“年龄”?

Python年龄换算&#xff1a;如何根据Python版本算出“年龄”&#xff1f; Python是一种高级编程语言&#xff0c;享有强大、易读、易用和可扩展性等各种优点。它是许多开发者使用的首选语言&#xff0c;尤其在数据科学和机器学习领域中备受推崇。 但是&#xff0c;Python几乎…

网络安全工具合集

首先&#xff0c;恭喜你发现了宝藏。 本文章集成了全网优秀的开源攻防武器项目&#xff0c;包含&#xff1a; 信息收集工具&#xff08;自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描工具、各种插件....etc...&#xff09; 漏洞利用…

轮廓检测及功能

目录 一、实验介绍二、实验步骤三、实验任务任务一&#xff1a;轮廓特征练习一: 找到每个轮廓的方向任务二&#xff1a;边界矩形练习二: 围绕轮廓裁剪图像 一、实验介绍 1. 实验内容 本实验将学习轮廓检测及功能。 2. 实验要点 生成二进制图像来查找轮廓找到并画出轮廓轮廓…

面试题--12

1.MySQL 的内连接、左连接、右连接有什么区别&#xff1f; 2.MySQL 索引是怎么实现的&#xff1f; 3.索引的优点和缺点—查询频率高的字段 4.B树的特点和作用----必须先看 下面的网址 5.什么是聚集索引和非聚集索引 6.索引的分类 7.什么是最左前缀法则以及如何设计最左法则 8.怎…

图论基础和表示

一、概念及其介绍 图论(Graph Theory)是离散数学的一个分支&#xff0c;是一门研究图(Graph)的学问。 图是用来对对象之间的成对关系建模的数学结构&#xff0c;由"节点"或"顶点"(Vertex&#xff09;以及连接这些顶点的"边"&#xff08;Edge&a…

chatgpt赋能python:Python开源免费——为什么它是SEO世界的最佳选择

Python开源免费——为什么它是SEO世界的最佳选择 介绍 Python是一种流行的程序设计语言&#xff0c;拥有众多的开源库和响应式社区。它广泛应用于机器学习、数据科学、Web开发、系统自动化等领域。Python不仅易于学习和使用&#xff0c;而且完全免费并且开源&#xff0c;使得…

Linux线程的同步与互斥(二) 条件变量+信号量

文章目录 二、线程同步条件变量1、条件变量的概念2、同步概念与竞态条件3、条件变量函数初始化4、条件变量函数销毁5、条件变量函数等待6、条件变量函数唤醒等待生产者消费者模型1、理论部分2、“3 2 1”原则3、基于阻塞队列的生产者消费者模型 POSIX信号量1、信号量的概念2、信…