0

0

如何使用 JavaScript 根据温度条件动态切换页面背景色

碧海醫心

碧海醫心

发布时间:2026-01-22 21:56:04

|

423人浏览过

|

来源于php中文网

原创

如何使用 JavaScript 根据温度条件动态切换页面背景色

本文详解如何通过调用天气 api 获取实时温度数据,并基于温度数值范围(如 ≤10°c、11–19°c、≥20°c)自动设置 body 背景色,包含完整异步请求示例、常见错误分析与实用注意事项。

前端开发中,根据动态数据(如实时天气温度)改变页面视觉效果是一种常见且实用的交互设计。但初学者常因数据获取时机、API 响应结构或 DOM 访问方式不当而遇到 undefined 错误——正如问题中所示:data.main.temp 报错,本质是未正确解析 API 返回的 JSON 数据结构,或在数据未加载完成时就尝试读取。

以下是一个健壮、可运行的实现方案,使用免费的 Open-Meteo API(无需 API Key),并适配摄氏单位:

async function colorChange() {
  try {
    // 请求 Denver(纬度39.7392,经度-104.9847)当日最高气温
    const response = await fetch(
      "https://api.open-meteo.com/v1/forecast?latitude=39.7392&longitude=-104.9847&daily=temperature_2m_max&timezone=GMT&forecast_days=1"
    );

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data = await response.json();
    const tempColor = data.daily.temperature_2m_max[0]; // ✅ 正确路径:数组首项即当日最高温
    console.log("当前最高气温:", tempColor, "°C");

    // 根据温度区间设置背景色
    if (tempColor <= 10) {
      document.body.style.backgroundColor = "lightgrey";
    } else if (tempColor >= 11 && tempColor < 20) {
      document.body.style.backgroundColor = "lightblue";
    } else {
      document.body.style.backgroundColor = "lightcoral";
    }

    // 可选:将温度显示在页面上便于调试
    document.querySelector("div#temp-display")?.textContent = 
      `?️ ${tempColor}°C`;
  } catch (err) {
    console.error("获取温度失败:", err);
    document.body.style.backgroundColor = "whitesmoke"; // 降级默认色
  }
}

// 页面加载完成后执行
document.addEventListener("DOMContentLoaded", colorChange);

配套 HTML 与基础样式(确保 DOM 存在):

<div id="temp-display">Temp goes here</div>
#temp-display {
  padding: 16px;
  font-family: -apple-system, BlinkMacSystemFont, sans-serif;
  text-align: center;
  margin: 20px auto;
  max-width: 300px;
}

? 关键要点说明

VIVA
VIVA

一个免费的AI创意视觉设计平台

下载

立即学习Java免费学习笔记(深入)”;

  • 结构匹配优先:OpenWeatherMap 的 data.main.temp 与 Open-Meteo 的 data.daily.temperature_2m_max[0] 结构不同,务必根据所选 API 文档确认字段路径;
  • 异步必须 await:fetch() 返回 Promise,需用 await 等待解析完成,否则 data 为 undefined;
  • 错误处理不可少:网络失败、跨域限制、API 限流等均可能导致请求中断,try...catch 是生产环境必备;
  • ⚠️ 避免硬编码 DOM 查询:原问题中 document.querySelector(data.main.temp).value 逻辑错误——data.main.temp 是数字,不是 CSS 选择器;应先获取数据,再操作 DOM;
  • ? 单位注意:Open-Meteo 默认返回摄氏度;若使用 OpenWeatherMap,请务必添加 &units=metric 参数,否则默认为开尔文(K)。

? 进阶建议

  • 将颜色逻辑抽离为独立函数(如 getBgColorByTemp(temp)),提升可测试性;
  • 添加平滑过渡:document.body.style.transition = 'background-color 0.5s ease';
  • 支持用户定位:用 navigator.geolocation 替代固定坐标,实现本地化天气响应。

掌握这一模式后,你不仅能实现温度驱动的背景变色,还可轻松扩展至湿度、空气质量、甚至自定义业务指标(如订单量、服务器负载)的可视化反馈。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

549

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

6468

2023.07.31

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号