JavaScript蓝桥杯------学海无涯

这篇具有很好参考价值的文章主要介绍了JavaScript蓝桥杯------学海无涯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、介绍

小蓝最近一直在云课平台学习,为了更好的督促自己,于是将每天的学习时间都记录了下来,但是如何更加直观的显示学习时间让小蓝很是苦恼。本题需要你使用 ECharts 帮助小蓝实现统计学习时间图表。

二、准备

本题已经内置了初始代码,打开实验环境,目录结构如下:

├── css
│   └── style.css
├── data.json
├── index.html
└── js
    ├── axios.min.js
    └── echarts.min.js

其中:

  • index.html 是主页面。
  • js/echarts.min.js 是 ECharts 文件。
  • js/axios.min.js 是 axios 文件。
  • css/style.css 是样式文件。
  • data.json 是学习时长数据。

接着,打开环境右侧的【Web 服务】,就可以在浏览器中看到如下效果:
JavaScript蓝桥杯------学海无涯

三、目标

请完成 index.html 文件中的 TODO 部分。

  1. 完成数据请求(数据来源 ./data.json),data.json 中存放的数据为对应月份中小蓝每天的学习时长,单位为分钟(在项目目录下已经提供了 axios,考生可自行选择是否使用)。
  2. 页面加载完成后,默认显示周统计数据。点击周和月,x 轴对应显示正确的周数(格式为:“x 月 x 周”)和月份,Y 轴显示小蓝对应周和对应月学习的总时长。

完成后,最终页面效果如下:
JavaScript蓝桥杯------学海无涯

四、代码

data.json

{
  "code": 200,
  "desc": "请求成功",
  "data": {
    "2月": [
      30, 40, 30, 20, 10, 20, 30, 69, 86, 12, 32, 12, 23, 40, 50, 61, 39, 28,
      20, 35, 20, 38, 43, 52, 30, 39, 52, 70
    ],
    "3月": [
      36, 48, 52, 30, 39, 52, 20, 18, 25, 33, 21, 36, 44, 63, 32, 89, 98, 23,
      25, 36, 29, 31, 42, 23, 45, 56, 98, 83, 25, 28, 48
    ]
  }
}

index.html文章来源地址https://www.toymoban.com/news/detail-470305.html

<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>学海无涯</title>
    <!-- <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.3.3/dist/echarts.min.js"></script> -->
    <script src="./js/echarts.min.js"></script>
    <link rel="stylesheet" href="./css/style.css" />
    <script src="./js/axios.min.js"></script>
  </head>

  <body style="height: 100%; margin: 0">
    <!-- tab 栏 -->
    <div class="container">
      <div class="tabs">
        <input type="radio" id="week" name="tabs" checked />
        <label class="tab" for="week"></label>
        <input type="radio" id="month" name="tabs" />
        <label class="tab" for="month"></label>
        <span class="glider"></span>
      </div>
    </div>
    <div
      id="container"
      style="width: 80%; height: 80%; margin: 40px auto 0"
    ></div>
    <script type="text/javascript">
      var dom = document.getElementById("container");
      var myChart = echarts.init(dom, null, {
        renderer: "canvas",
        useDirtyRect: false,
      });
      var option;
      option = {
        title: {
          text: "学习时长统计图",
        },
        legend: {},
        xAxis: {
          // x 轴数据
          type: "category",
          data: [1, 2, 3, 4, 5, 6, 7],
        },
        yAxis: {
          type: "value",
          name: "分钟",
          axisLabel: {
            formatter: "{value}",
          },
        },
        series: [
          // y 轴数据
          {
            data: [120, 200, 150, 80, 70, 110, 130],
            type: "bar",
          },
        ],
      };
      if (option && typeof option === "object") {
        // 设置图表
        myChart.setOption(option);
      }
      window.addEventListener("resize", myChart.resize);

      // TODO:待补充代码
    </script>
  </body>
</html>

五、完成

//TODO
	//获取josn数据
      async function getData() {
        const res = await axios({ url: "./data.json" });
        return res.data.data;
      }
      //将数组划分为每七个一组
      function mySplice(arr) {
        let newArr = [];
        while (arr.length) {
          newArr.push(arr.splice(0, 7));
        }
        return newArr;
      }
      //初始化周
      async function initWeek() {
        let keys = [];
        let values = [];
        const res = await getData();
        //处理keys
        for (item in res) {
          let num = Math.ceil(res[item].length / 7);
          for (var i = 1; i <= num; i++) {
            keys.push(`${item}` + "第" + `${i}` + "周");
          }
        }
        //处理values
        for (item in res) {
          const a = mySplice(res[item]);
          a.forEach((item) => {
            values.push(
              item.reduce((total, current) => {
                return (total += current);
              }, 0)
            );
          });
        }
        this.option.series[0].data = values;
        this.option.xAxis.data = keys;
        this.myChart.setOption(option);
      }
      //页面加载完成后先执行一遍初始化周
      initWeek();
      //初始化月
      async function initMonth(){
        const res = await getData();
        let keys = [];
        let values = [];
        //处理x,y
        for (item in res) {
          keys.push(item);
          values.push(
            res[item].reduce((total, current) => {
              return (total += current);
            }, 0)
          );
        }
        // console.log(this.option.series[0]);
        this.option.series[0].data = values;
        this.option.xAxis.data = keys;
        this.myChart.setOption(option);
      }
      //周和月切换效果 添加点击监听
      const week = document.getElementById("week");
      const month = document.getElementById("month");
      week.addEventListener("click",  function () {
         initWeek();
      });
      month.addEventListener("click",  function () {
        initMonth()
      }); 

到了这里,关于JavaScript蓝桥杯------学海无涯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-JavaScript - DB函数

    DB函数使用固定余额递减法返回指定期间内资产的折旧。 Argument 描述 Required/Optional Cost The initial cost of the asset. Required Salvage The value at the end of the depreciation (sometimes called the salvage value of the asset). Required Life The number of periods over which the asset is being depreciated (sometimes called the useful

    2024年02月09日
    浏览(46)
  • 无涯教程-JavaScript - CUMIPMT函数

    CUMIPMT函数返回start_period和end_period之间的贷款累计利息。 Argument 描述 Required/Optional Rate The interest rate. Required Nper The total number of payment periods. Required Pv The present value. Required Start_period 计算的第一个期间。 付款期从1开始编号。 Required End_period The last period in the calculation. Required T

    2024年02月09日
    浏览(89)
  • 无涯教程-JavaScript - IMPRODUCT函数

    IMPRODUCT函数以x + yi或x + yj文本格式返回1到255个复数的乘积。两个复数的乘积为- $$(A + BI)(C + DI)=(AC-BD)(A + B)1 $$ Argument 描述 Required/Optional Inumber1 1 to 255 complex numbers to multiply. Required [inumber2], … 1 to 255 complex numbers to multiply. Optional Excel中的复数仅存储为文本。 当将格式为\\\" a + bi\\\"或

    2024年02月09日
    浏览(46)
  • 无涯教程-JavaScript - IMDIV函数

    IMDIV函数以x + yi或x + yj文本格式返回两个复数的商。 $$IMDIV(z1,z2)= frac {(a + bi)} {(c + in)} = frac {{ac + bd)+(bc-ad)i} {c ^ 2 + d ^ 2 } $$ Argument 描述 Required/Optional Inumber1 The complex numerator or dividend. Required Inumber2 The complex denominator or divisor. Required Excel中的复数仅存储为文本。 当将格式为\\\" a

    2024年02月09日
    浏览(43)
  • 无涯教程-JavaScript - ROW函数

    ROW函数返回引用的行号。 Argument 描述 Required/Optional Reference 您想要其行号的单元格或单元格范围。 如果省略引用,则假定它是出现ROW函数的单元格的引用。 请参阅下面的注释。 Optional 如果引用是一个单元格范围,并且如果将ROW作为垂直数组输入,则ROW将引用的行号作为垂直数组

    2024年02月07日
    浏览(45)
  • 无涯教程-JavaScript - DDB函数

    DDB函数使用双倍余额递减法或您指定的某些其他方法返回指定期间内资产的折旧。 Argument 描述 Required/Optional Cost The initial cost of the asset. Required Salvage 折旧结束时的价值(有时称为资产的残值)。 该值可以为0。 Required Life The number of periods over which the asset is being depreciated (sometime

    2024年02月09日
    浏览(44)
  • 无涯教程-JavaScript - DAYS函数

    DAYS函数返回两个日期之间的天数。 Argument 描述 Required/Optional End_date Start_date and End_date are the two dates between which you want to know the number of days. Required Start_date Start_date and End_date are the two dates between which you want to know the number of days. Required Excel将日期存储为序列号,以便可以在计算中

    2024年02月10日
    浏览(43)
  • 无涯教程-JavaScript - HYPGEOMDIST函数

    HYPGEOMDIST函数替代Excel 2010中的HYPGEOM.DIST函数。 该函数返回超几何分布。 HYPGEOMDIST返回给定样本数量,给定样本数量,总体成功率和总体数量的概率。 将HYPGEOMDIST用于具有有限总体的问题,其中每个观察输出都是成功或失败,并且给定大小的每个子集的选择可能性均等。 Argument 描述

    2024年02月10日
    浏览(51)
  • 无涯教程-JavaScript - IMCSCH函数

    IMCSCH函数以x + yi或x + yj文本格式返回复数的双曲余割。 复数的双曲余割定义为双曲正弦的倒数,即 csch(z)= 1 /出生(z) Argument 描述 Required/Optional Inumber A complex number for which you want the hyperbolic cosecant. Required Excel中的复数仅存储为文本。 当将格式为\\\" a + bi\\\"或\\\" a + bj\\\"的文本字符串提供

    2024年02月09日
    浏览(43)
  • 无涯教程-JavaScript - IMPOWER函数

    IMPOWER函数以x + yi或x + yj文本格式返回加到幂的复数。求幂的复数的计算方法如下- $$(x + yi)^ n = r ^ ne ^ {n theta} = r ^ n cos n theta + ir ^ n sin n theta $$ 哪里- $$r = sqrt {x ^ 2 + y ^ 2} ::和::theta = tan ^ {-1} left(frac {y} {x} right): :和::theta epsilon(-pi; pi] $$ Argument 描述 Required/Optiona

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包