練習小項目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
繁體地址,請注明出處:http://hk.pswp.cn/web/81155.shtml
英文地址,請注明出處:http://en.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…