练习小项目7:天气状态切换器

🧠 项目目标:

点击按钮切换不同天气状态,背景或图标随之变化。

✨ 功能描述:

  • 显示当前天气(如:☀️ 晴天 / ☁️ 多云 / 🌧️ 雨天)

  • 点击“切换天气”按钮,每点击一次切换到下一种天气

  • 更换天气时,背景颜色或页面样式会变化

💡 技术点练习:

  • 数组索引循环

  • DOM 文本和样式修改

  • classList 切换

  • 对用户状态的可视反馈

 页面结构(HTML 参考):

<div class="container"><h2 id="weatherText">☀️ 晴天</h2><button id="changeBtn">切换天气</button>
</div>

 实践代码如下: 

JS: 

const weatherText = document.getElementById('weatherText')
const changeBtn = document.getElementById('changeBtn')const weatherData = [{ icon: "☀️", text: "晴天", class: "sunny" },{ icon: "☁️", text: "多云", class: "cloudy" },{ icon: "🌧️", text: "雨天", class: "rainy" }
]let i = 0
const updateWeather = (index) => {// 更新文本weatherText.textContent = `${weatherData[index].icon} ${weatherData[index].text}`// 移除所有旧的 classweatherData.forEach(weather => {document.body.classList.remove(weather.class)})// 添加新的 classdocument.body.classList.add(weatherData[index].class)// 更新全局索引 ii = index
}
changeBtn.addEventListener('click', () => {// 每次调用时,传入下一个索引updateWeather((i + 1) % weatherData.length)
})// 初始设置
updateWeather(0)

 CSS:

 body {transition: background-color 0.3s;font-family: sans-serif;text-align: center;padding-top: 50px;}.sunny {background-color: #ffe066;color: #333;}.cloudy {background-color: #d0d0d0;color: #333;}.rainy {background-color: #7f8fa6;color: white;}button {margin-top: 20px;padding: 10px 20px;}

页面效果展示 : 

 

额外知识记录:

(i + 1) % weatherData.length的理解

这是循环索引的技巧:

  • i 是当前索引

  • 加 1 后对总长度取余,可以在数组中循环切换,比如 0 → 1 → 2 → 0...

✅ 清空样式的方式

weatherData.forEach(weather => {document.body.classList.remove(weather.class)
})

虽然每次都移除所有 class,看起来“重复”,但这种方式:

  • 简单清晰 

  • 不需要判断当前状态 

  • 性能上没问题(浏览器对 classList.remove 做了优化)

这是小项目中推荐使用的方式

✅ 如果在 updateWeather(index) 函数里不加i=index会怎么样?

会导致 全局变量 i 不能正确更新当前显示的天气索引,从而影响下一次点击时计算的“下一个天气”。

具体表现是:

  • 第一次点击按钮时,nextIndex = (i + 1) % weatherData.length,假设 i 是 0,nextIndex 就是 1。

  • 调用 updateWeather(1) 显示了第2个天气,但如果没有 i = index,全局变量 i 依然是 0。

  • 下一次点击时,nextIndex 还是 (0 + 1) % length,还是 1,页面显示的不会切换到第3个天气,永远停留在第2个。

  • 也就是说,点击按钮后显示会切换,但内部“记录当前天气索引”的变量没有更新,导致后续点击计算下一状态出错,循环无法正常进行。

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

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

相关文章

esp32 lvgl9.2版本,透明底色图片的,透明部分被渲染成黑色,不随背景颜色变化解决办法

在lvgl图片转换工具时&#xff0c;指定转换格式为ARGB8888 代指Alpha RGB RGB565&#xff08;不支持 Alpha&#xff09;&#xff0c;透明像素会被解释为黑色。改用 ARGB8888。 有问题的 转换为ARGB8888后的

AI智能分析网关V4区域入侵检测算法:全功能覆盖,多场景守护安防安全

一、方案背景​ 在当今社会&#xff0c;安全需求日益增长&#xff0c;传统安防监控系统因效率低、精准度不足等问题&#xff0c;已无法满足现代安全防范的要求。AI智能分析网关V4区域入侵检测算法凭借其先进的人工智能技术&#xff0c;能够实时、精准地识别区域内的异常入侵行…

Phantom 视频生成的流程

Phantom 视频生成的流程 flyfish Phantom 视频生成的实践 Phantom 视频生成的流程 Phantom 视频生成的命令 Wan2.1 图生视频 支持批量生成 Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理 Wan2.1 加速推理方法 Wan2.1 通过首尾帧生成视频 AnyText2 在图片里玩…

瑞萨单片机笔记

1.CS for CC map文件中显示变量地址 Link Option->List->Output Symbol information 2.FDL库函数 pfdl_status_t R_FDL_Write(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_u16 bytecount) pfdl_status_t R_FDL_Read(pfdl_u16 index, __near pfdl_u08* buffer, pfdl_…

uniapp+ts 多环境编译

1. 创建项目 npx degit dcloudio/uni-preset-vue#vite-ts [项目名称] 2.创建env目录 多环境配置文件命名为.env.别名 添加index.d.ts interface ImportMetaEnv{readonly VITE_ENV:string,readonly UNI_PLATFORM:string,readonly VITE_APPID:string,readonly VITE_NAME:stri…

英语学习5.24

make informed decisions 表示“做出明智的决定”&#xff0c;是一个常用的固定搭配&#xff0c;常用于议论文中。 …to make informed decisions. 为了做出明智的决定&#xff08;表示目的的动词不定式&#xff09;。 We need accurate data to make informed decisions. Ci…

【Qt】QImage::Format

QImage::Format 是 Qt 中用于指定图像像素数据格式的枚举类型。它决定了图像如何存储颜色信息和透明度&#xff08;如果有&#xff09;。选择合适的 Format 对性能、内存占用以及是否支持某些特性&#xff08;如透明通道&#xff09;有重要影响。 常见的 QImage::Format 枚举值…

算法笔记·数学·欧拉函数

题目&#xff1a;&#xff08;AcWing&#xff09; 给定 n 个正整数 ai&#xff0c;请你求出每个数的欧拉函数。 欧拉函数的定义 1∼N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N)。 若在算数基本定理中&#xff0c;N&#xff0c;则&#xff1a; ϕ(N) N 输入…

深入理解Redis线程模型

Redis数据 redis数据保存在内存&#xff0c;但是会持久化到硬盘 Redis线程 Redis的整体线程模型可以简单解释为 客户端多线程&#xff0c;服务端单线程。也就是可以多个客户端同时连接。 核心线程模型&#xff1a;单线程 多路复用 Redis 的主线程负责处理所有客户端请求&a…

「Python教案」输入输出函数的使用

课程目标 1&#xff0e;知识目标 能使用input()输入函数和print()输出函数实现人机之间的交互。能够合理的确定输入数据的数据类型&#xff0c;并进行数据类型转换。能够使用格式化字符串&#xff08;f-string&#xff09;将数据动态输出。 2&#xff0e;能力目标 能够使用…

医疗影像中,DICOM点云、三角面片实体混合渲染(VR)

此文章&#xff0c;涉及到专业性比较强&#xff0c;所以&#xff0c;大部分的内容&#xff0c;基本上都是示例代码的形式出现。以下的技术路径&#xff0c;完全经过实践验证&#xff0c;并且效果很好&#xff0c;可以放心使用。 1 概述 在医学影像中&#xff0c;对DICOM的渲染…

【C/C++】线程状态以及转换

文章目录 线程状态以及转换1 基本状态1.1 新建&#xff08;New&#xff09;1.2 就绪&#xff08;Ready / Runnable&#xff09;1.3 运行中&#xff08;Running&#xff09;1.4 阻塞/等待&#xff08;Blocked / Waiting / Sleeping&#xff09;1.5 挂起&#xff08;Suspended&am…

Python与自动驾驶数据集处理:构建智能驾驶的基石

Python与自动驾驶数据集处理:构建智能驾驶的基石 在自动驾驶技术的快速发展中,数据始终是最核心的驱动力。自动驾驶系统依赖于大量的传感器数据(激光雷达、摄像头、GPS等),通过深度学习算法不断优化决策,使车辆能够自主感知、理解道路环境并做出合理决策。而 Python 作为…

【菜狗work前端】小程序加if判断时不及时刷新 vs Web

零、前提&#xff1a; 实现input输入数字不大于10000&#xff08;需要配合typenumber&#xff0c;maxlength5&#xff0c;这里没写&#xff09; 一、探究代码&#xff1a; <input v-model"model1" input"changeModel1" placeholder"请输入拒收件…

【Netty】- NIO基础2

阻塞模式 客户端代码 public class Client {public static void main(String[] args) throws IOException {SocketChannel sc SocketChannel.open();sc.connect(new InetSocketAddress("localhost", 8080));// sc.write(Charset.defaultCharset().encode("he…

【WebRTC】源码更改麦克风权限

WebRTC源码更改麦克风权限 仓库: https://webrtc.googlesource.com/src.git分支: guyl/m125节点: b09c2f83f85ec70614503d16e4c530484eb0ee4f

cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins

cocos 版本2.4.11 在windows上jenkins的具体配置和部署&#xff0c;可参考上一篇文章cocos creator使用jenkins打包流程&#xff0c;打包webmobile_jenkins打包,发布,部署cocoscreator-CSDN博客 特别注意&#xff0c;windows上运行jenkins需要关闭windows自己的jenkins服务&a…

力扣刷题(第三十六天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 多数元素 解题思路 这道题是要找出数组中出现次数超过一半的元素。有几种不同的方法可以解决这个问题&#xff1a; 哈希表统计法&#xff1a;遍历数组&#xff0c;用哈希表统计每个元素的出现次数&#xff0c;…

关于读取CH584单片机的IO电平出现到的乌龙

本来是调用的库里的 uint8_t get_wake_up_sta (void) {return GPIOB_ReadPortPin(GPIO_Pin_10);//return cc_gpio_get_in_io (WAKUP_CH);} 然后读出来是0&#xff0c;我都配置上拉了。 搞不到原因。 最后是CH584单片机只有0和非零两种状态&#xff0c;读出来1024被转换成无…

Opencv常见学习链接(待分类补充)

文章目录 1.常见学习链接 1.常见学习链接 1.Opencv中文官方文档 2.Opencv C图像处理&#xff1a;矩阵Mat 随机数RNG 计算耗时 鼠标事件 3.Opencv C图像处理&#xff1a;亮度对比度饱和度高光暖色调阴影漫画效果白平衡浮雕羽化锐化颗粒感 4.OpenCV —— 频率域滤波&#xff…