蓝桥杯 web 学海无涯(axios、ecahrts)版本二

答案:

// TODO: 待补充代码// 初始化图表的数据,设置周视图的初始数据
option.series[0].data = [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 周数据(每周的总学习时长)
option.xAxis.data = ["2月第1周", "2月第2周", "2月第3周", "2月第4周", "3月第1周", "3月第2周", "3月第3周", "3月第4周", "3月第5周"]; // 周标签(每周的时间段)
myChart.setOption(option); // 将配置应用到图表,初始化为周视图// 定义变量用于存储月视图的数据
let xMonthSeries; // 存储月份标签(如 ["2月", "3月"])
let yMonthSeries; // 存储每月的总学习时长(如 [总时长1, 总时长2])// 定义一个求和函数,用于计算数组中所有元素的总和
function sum(arr) {return arr.reduce((total, value) => total += value, 0); // 使用 reduce 方法对数组进行累加,初始值为 0
}// 获取数据:从 data.json 文件中加载数据
axios.get('./data.json').then(({ data: { data } }) => {console.log(data); // 打印从 data.json 中获取的数据,便于调试// 提取月份标签(即对象的键,如 "2月"、"3月")xMonthSeries = Object.keys(data); // 获取对象的所有键,形成月份标签数组// 计算每个月的学习总时长yMonthSeries = [sum(Object.values(data)[0]), // 第一个月(如 "2月")的学习时长总和sum(Object.values(data)[1])  // 第二个月(如 "3月")的学习时长总和];
});// 监听 Tab 切换事件:实现“周”和“月”视图的切换
let tabs = document.getElementsByClassName('tab'); // 获取所有的 tab 元素
for (let index = 0; index < tabs.length; index++) {tabs[index].addEventListener('click', (e) => {console.log(e.target.textContent); // 打印当前点击的 Tab 标签内容("周" 或 "月")if (e.target.textContent === '月') {// 如果点击的是“月”Tab,则切换为月视图option.series[0].data = yMonthSeries; // 设置月视图的 y 轴数据(每月的总学习时长)option.xAxis.data = xMonthSeries;   // 设置月视图的 x 轴数据(月份标签)myChart.setOption(option);          // 应用新的配置到图表} else if (e.target.textContent === '周') {// 如果点击的是“周”Tab,则切换为周视图option.series[0].data = [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 恢复周视图的 y 轴数据option.xAxis.data = ["2月第1周", "2月第2周", "2月第3周", "2月第4周", "3月第1周", "3月第2周", "3月第3周", "3月第4周", "3月第5周"]; // 恢复周视图的 x 轴数据myChart.setOption(option); // 应用新的配置到图表}});
}

详细注释说明

1. 初始化图表数据
  • option.series[0].data 和 option.xAxis.data
    • 这是 ECharts 图表的核心数据部分。
    • series[0].data 表示 y 轴数据(如每周的学习时长)。
    • xAxis.data 表示 x 轴数据(如每周的时间段)。
    • 在这里,我们设置了初始的周视图数据。
2. 定义变量
  • xMonthSeries 和 yMonthSeries
    • 这两个变量用于存储月视图的数据。
    • xMonthSeries 是月份标签(如 ["2月", "3月"])。
    • yMonthSeries 是每月的学习时长总和(通过 sum 函数计算得出)。
3. 求和函数
  • sum(arr)
    • 使用 reduce 方法对数组中的所有元素进行累加。
    • reduce 的回调函数接收两个参数:累积值 total 和当前值 value
    • 初始值为 0,确保即使数组为空,返回值也是 0
4. 获取数据
  • axios.get('./data.json')
    • 使用 Axios 发起 HTTP GET 请求,从 data.json 文件中加载数据。
    • { data: { data } } 是解构赋值,直接提取响应中的 data 部分。
    • Object.keys(data) 获取对象的所有键,形成月份标签数组。
    • Object.values(data) 获取对象的所有值(即每月的学习时长数组),并调用 sum 函数计算总和。
5. 监听 Tab 切换
  • document.getElementsByClassName('tab')
    • 获取页面中所有的 tab 元素(即“周”和“月”按钮)。
  • addEventListener('click', ...)
    • 为每个 tab 添加点击事件监听器。
    • 当用户点击某个 Tab 时,根据其内容(e.target.textContent)判断是“周”还是“月”。
    • 根据判断结果,动态更新 option 的数据,并调用 myChart.setOption(option) 更新图表。

1. 初始化图表数据

option.series[0].data = [180, 274, 253, 324, 277, 240, 332, 378, 101];
option.xAxis.data = ["2月第1周", "2月第2周", ..., "3月第5周"];
myChart.setOption(option);
  • option 是一个配置对象,用于设置图表的数据和样式。
  • series[0].data 是图表的数值数据(如柱状图的高度)。
  • xAxis.data 是图表的横轴标签(如时间周期)。
  • myChart.setOption(option) 将这些配置应用到图表中,初始显示的是“周”维度的数据。

2. 定义变量和函数

let xMonthSeries;
let yMonthSeries;function sum(arr) {return arr.reduce((total, value) => total += value, 0);
}
  • xMonthSeries 和 yMonthSeries 是两个变量,分别用于存储“月”维度的横轴标签和纵轴数据。
  • sum 函数用于计算数组中所有元素的总和(例如 [1, 2, 3] 的总和是 6)。

3. 获取数据并处理

axios.get('./data.json').then(({ data: { data } }) => {console.log(data);xMonthSeries = Object.keys(data);yMonthSeries = [sum(Object.values(data)[0]),sum(Object.values(data)[1])];
});
  • 使用 axios.get 从文件 data.json 中获取数据。
  • 假设 data.json 的内容如下:
    {"2月": [180, 274, 253, 324],"3月": [277, 240, 332, 378, 101]
    }
  • Object.keys(data) 提取键(即月份),结果为 ["2月", "3月"],赋值给 xMonthSeries
  • Object.values(data) 提取值(即每个月对应的数组),然后用 sum 函数计算每个数组的总和,结果为 [1031, 1328],赋值给 yMonthSeries

4. 监听 Tabs 点击事件

let tabs = document.getElementsByClassName('tab');
for (let index = 0; index < tabs.length; index++) {tabs[index].addEventListener('click', (e) => {console.log(e.target.textContent);if (e.target.textContent === '月') {option.series[0].data = yMonthSeries;option.xAxis.data = xMonthSeries;myChart.setOption(option);} else if (e.target.textContent === '周') {option.series[0].data = [180, 274, 253, 324, 277, 240, 332, 378, 101];option.xAxis.data = ["2月第1周", "2月第2周", ..., "3月第5周"];myChart.setOption(option);}});
}
  • tabs 是页面上所有的 Tab 按钮(假设有两个按钮:一个是“月”,另一个是“周”)。
  • 给每个 Tab 按钮添加点击事件监听器,当用户点击时触发回调函数。
  • 回调函数根据点击的按钮内容(e.target.textContent)判断用户选择了“月”还是“周”:
    • 如果选择“月”,则更新图表数据为“月”维度的数据(xMonthSeries 和 yMonthSeries)。
    • 如果选择“周”,则更新图表数据为“周”维度的原始数据。
  • 最后调用 myChart.setOption(option) 更新图表。

5. 总结

这段代码的核心功能是通过切换“周”和“月”的视图来动态更新图表数据:

  • 初始显示“周”维度的数据。
  • 当用户点击“月”按钮时,显示每个月的总和。
  • 当用户点击“周”按钮时,恢复显示每周的原始数据。

    版本一文章的链接:蓝桥杯 web 学海无涯(echarts、axios)

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

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

相关文章

Java 大视界 -- Java 大数据在智慧文旅虚拟场景构建与沉浸式体验增强中的技术支撑(168)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

API vs 网页抓取:获取数据的最佳方式

引言 在当今数字化时代&#xff0c;对于企业、研究人员以及开发人员而言&#xff0c;获取准确且及时的数据是大多数项目成功的关键因素。目前&#xff0c;收集网页数据主要有两种常用方法&#xff0c;即使用 API&#xff08;应用程序接口&#xff09;和网页抓取。然而&#xf…

车载以太网网络测试-25【SOME/IP-报文格式-1】

目录 1 摘要2 SOME/IP-报文格式2.1 **Service ID / 16 bits**2.2 **Method ID / Event ID / 16 bits**2.3 **Length / 32 bits**2.4 **Client ID / 16 bits**2.5 Session ID / 16 bits2.6 Protocol Version / 8 bits2.7 Interface Version / 8 bits2.8 Message Type / 8 bits2.…

Python数据可视化-第3章-图表辅助元素的定制

环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容&#xff0c;本章为第3章-图表辅助元素的定制 本章主要介绍了图表辅助元素的定制&#xff0c;包括认识常用的辅助元素、设置坐标轴的标签、设置刻度范…

小程序30-wxml语法-声明和绑定数据

小程序页面中使用的数据均需要在Page() 方法的 data对象中进行声明定义 在将数据声明好以后&#xff0c;在 WXML 使用 Mustache 语法 ( 双大括号{{ }} ) 将变量包起来&#xff0c;从而将数据绑定 在 {{ }} 内部可以做一些简单的运算&#xff0c;支持如下几种方式: 算数运算三…

ubuntu开启黑屏现象解决

文章目录 前言一、问题描述二、解决方案1. 检查显卡驱动解决步骤&#xff1a; 2. 修复 GRUB 配置解决步骤&#xff1a; 3. 使用恢复模式解决步骤&#xff1a; 三、验证与总结 前言 在使用 Ubuntu 操作系统时&#xff0c;一些用户可能会遇到开机后屏幕黑屏的现象。这种问题可能…

Modbus TCP转Profibus DP网关接防撞雷达与PLC通讯

Modbus TCP转Profibus DP网关接防撞雷达与PLC通讯 在工业自动化领域&#xff0c;通信协议的多样性既是技术进步的体现&#xff0c;也给系统集成带来了挑战。Modbus TCP和Profibus DP是两种广泛应用于不同场景下的通信标准&#xff0c;它们各有优势但也存在着互操作性的需求。本…

分布式锁方案-Redisson

分布式锁&#xff1a;Redisson还实现了Redis文档中提到像分布式锁Lock这样的更高阶应用场景。事实上Redisson并没有不止步于此&#xff0c;在分布式锁的基础上还提供了联锁&#xff08;MultiLock&#xff09;&#xff0c;读写锁&#xff08;ReadWriteLock&#xff09;&#xff…

【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现

一、项目背景与技术选型 在上篇文章实现"选中即问AI"功能的基础上&#xff0c;本文重点解决AI对话窗口的集成与核心功能菜单的开发。通过Notepad插件体系&#xff0c;我们将实现以下功能矩阵&#xff1a; AI交互系统&#xff1a;支持自然语言提问与任务执行代码智能…

ControlNet-Tile详解

一、模型功能与应用 1. 模型功能 ControlNet-Tile模型的主要功能是图像的细节增强和质量提升。它通过以下几个步骤实现这一目标&#xff1a; 语义分割&#xff1a;模型首先对输入的图像进行语义分割&#xff0c;识别出图像中不同的区域和对象。这一步是为了让模型理解图像的内…

英飞凌高信噪比MEMS麦克风驱动人工智能交互

导言 在英飞凌&#xff0c;我们一直坚信卓越的音频解决方案对于提升消费类设备的用户体验至关重要。我们坚定不移地致力于创新&#xff0c;在主动降噪、语音透传、录音室录音、音频变焦和其他相关技术方面取得了显著进步&#xff0c;对此我们深感自豪。作为MEMS麦克风的领先供…

【Azure】如何使用 Docker CLI 和 Compose 将容器部署到 Azure ACI

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战在云中运行容器可能既困难又令人困惑。有太多选项可供选择,而且还需要理解从虚拟网络到安全性的不同云服务的工作方式。更不用说编排器了。…

结构化剪枝(Structured Pruning)与动态蒸馏(Dynamic Distillation)

结构化剪枝&#xff08;Structured Pruning&#xff09;技术详解 核心原理 结构化剪枝通过模块级&#xff08;如层、通道、块&#xff09;而非单个权重的方式去除冗余参数&#xff0c;保留关键子网络。其优势在于&#xff1a; 硬件友好性&#xff1a;生成规则稀疏模式&#x…

linux shell 删除空行(remove empty lines)

命令行 grep -v ^$ file sed /^$/d file 或 sed -n /./p file awk /./ {print} file 或 awk {if($0!" ") print} tr -s "n"vim交互 %s/^n//g

数据库6(数据库指令)

之前所学的指令均为查找指令&#xff0c;即select相关语句 接下来的语句是增删改查的其他三部分&#xff0c;即增删改 1.删除 删除操作是三个操作中较为简单的&#xff0c;因为它只需要考虑数据的完整性 在实验时可以用表的复件来操作&#xff0c;防止操作不当导致数据库被…

web网页上实现录音功能(vue3)

文章目录 一. 前言二. 技术实现1.核心API介绍2.模板部分3.核心逻辑实现 4. 关键功能点解析 三. 完整代码四. 功能扩展建议 一. 前言 在Web开发中实现音频录制功能是许多应用场景的常见需求。本文将通过一个完整的Vue 3组件示例&#xff0c;详细解析如何利用现代浏览器API实现网…

安美数字酒店宽带运营系统存在SQL注入漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 安美数字酒店宽带运营系统的lang…

206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表

leetcode Hot 100系列 文章目录 一、翻转链表二、反转链表 II三、K 个一组翻转链表总结 一、翻转链表 建立pre为空&#xff0c;建立cur为head&#xff0c;开始循环&#xff1a;先保存cur的next的值&#xff0c;再将cur的next置为pre&#xff0c;将pre前进到cur的位置&#xf…

【区块链安全 | 第十七篇】类型之引用类型(一)

文章目录 引用类型数据存储位置分配行为 数组特殊数组&#xff1a;bytes 和 string 类型bytes.concat 和 string.concat 的功能分配 memory 数组数组字面量&#xff08;Array Literals&#xff09;二维数组字面量数组成员&#xff08;Array Members&#xff09;悬空引用&#x…

selenium和pytessarct提取古诗文网的验证码(python爬虫)

代码实现的主要功能&#xff1a; 浏览器自动化控制 验证码图像获取与处理 OCR验证码识别 表单自动填写与提交 登录状态验证 异常处理与资源清理 1. 浏览器初始化与页面加载 driver webdriver.Chrome() driver.get("https://www.gushiwen.cn/user/login.aspx?fro…