查天气(Vue.js,Element UI)

 演示图

几点注意

  1. 有亿点简陋,凑合能用,button一定要 !important 覆盖原本的 element ui ,不然无效
  2. axios回调函数中 this 指向改变了,需要额外的保存一份
  3. 服务器返回的数据比较复杂时,获取的时候需要注意层级结构
  4. methods 中定义的方法内部,可以通过 this 关键字点出其他的方法
  5. 使用的是和风天气API,可以免费申请哦

完整代码

html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>查天气</title>
    <link rel="stylesheet" href="css/index.css" />
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">

</head>

<body>
    <div id="app">
        <div class="logo"><img src="img/logo.png" alt="logo" /></div>
        <div class="header">
            <!-- 搜索框 -->
            <div class="input_group">
                <el-input class="input_border" v-model="city" placeholder="请输入查询的城市"
                    @keyup.enter.native="queryWeather"></el-input>
                <el-button class="input_sub" @click="queryWeather">搜索</el-button>
            </div>

            <!-- 热门城市 -->
            <el-row class="hotkey-container">
                <el-tag class="hotkey" v-for="city in hotCitys" :key="city" @click="clickSearch(city)">{{ city
                    }}</el-tag>
            </el-row>
        </div>

        <!-- 天气列表 -->
        <ul class="weather_list">
            <li v-if="weatherData" v-for="(day, index) in weatherData" :key="index">
                <!-- 天气 -->
                <div class="info_type">
                    <span class="iconfont">{{ day.textDay }}</span>
                </div>
                <!-- 温度 -->
                <div class="info_temp">
                    <b>{{ day.tempMin }}</b> ~ <b>{{ day.tempMax }}</b> °C
                </div>
                <!-- 日期 -->
                <div class="info_date">
                    <span>{{ day.fxDate }}</span>
                </div>
                <!-- 空气质量 -->
                <div class="quality">
                    <p>空气质量指数: {{ airQualities[index].aqi }}</p>
                    <p>空气质量级别: {{ airQualities[index].category }}</p>
                </div>
            </li>
        </ul>


    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <script src="./查天气.js"></script>

</body>
</html>

css 

/* 设置 Logo 图片的样式 */
.logo img {
    display: block;
    /* 将图片显示为块级元素 */
    weight: 130px;
    height: 130px;
    margin: 30px auto;
    /* border: #666 1px solid; */
}

/* 搜索框和热门城市 */
.header {
    width: 600px;
    margin: 0 auto;
}

/* 设置表单组的样式 */
.input_group {
    display: flex;
}

/* 设置文本输入框的样式 */
.input_border {
    width: 500px;
}

/* 设置提交按钮的样式 */
.input_sub {
    width: 100px;
    color: #fff !important;
    background-color: #dca6e2 !important;
    /* 使用 !important 来覆盖 Element UI 默认样式 */
}


/* 热门城市容器 */
.hotkey-container {
    /* margin:0 auto; */
    width: 310px;
}

/* 热门城市 */
.hotkey {
    margin: 2px;
    cursor: pointer;
    color: #fff !important;
    background-color: #e3b7df !important;
}

/* 热门城市,搜索按钮点击变暗 */
.hotkey:active,
.input_sub:active {
    opacity: 0.8; /* 设置点击时的透明度 */
}

/* 设置天气列表的样式 */
.weather_list {
    /* border: 1px solid #cc91d3; */
    height: 200px;
    text-align: center;
    /* 文字居中 */
    margin-top: 50px;
    font-size: 0px;
    /* 字体大小为0,避免列表项之间出现间隙 */
}

/* 设置天气列表中每个天气项的样式 */
.weather_list li {
    display: inline-block;
    /* 内联块元素 */
    color: #E38EFF;
    font-size: 33px;
    line-height: 40px;
    width: 180px;
    height: 250px;
    padding: 0 10px;
    overflow: hidden;
    position: relative;
    /* 相对定位 */
    background: url('../img/line.png') right center no-repeat;
    background-size: 1px 200px;
    /* border:1px solid #666; */
}

/* 最后一个天气列表项不显示背景 */
.weather_list li:last-child {
    background: none;
}

/* 设置天气温度的样式 */
.info_temp {
    font-size: 18px;
    color: #f692ce;
    /* border:1px solid #8e3a3a; */
}

/* 日期 */
.info_date {
    width: 100%;
    color: #999;
    font-size: 16px;
    /* border:1px solid #8e3a3a; */
}


/* 设置空气质量的样式 */
.quality {
    position: absolute;
    /* 绝对定位 */
    left: 0;
    /* 左边距为0 */
    top: 122px;
    line-height: 15px;
    color: #666;
    /* 文字颜色 */
    font-size: 15px;
    /* 文字大小 */
    width: 100%;
    /* 宽度100% */
    text-align: center;
    /* 文字居中对齐 */
    /* border:1px solid #8e3a3a; */
}

 js

new Vue({
    el: "#app",
    data: {
        city: "北京",
        weatherData: null,
        airQualities: null, // 添加空气质量数据
        hotCitys: ["北京", "上海", "广州", "深圳"],
        apiKey: "xxxxxxx" // 直接将 API 密钥硬编码到 JavaScript 中
    },
    methods: {
        // 查询天气
        queryWeather() {
            axios
                .get(`https://geoapi.qweather.com/v2/city/lookup?key=${this.apiKey}&location=${encodeURIComponent(this.city)}`)
                .then(res => {
                    const locationData = res.data.location[0];
                    const cityId = locationData.id;
                    // 获取天气数据
                    this.fetchWeatherData(cityId);
                    // 获取空气质量数据
                    this.fetchAirQuality(cityId);
                })
                .catch(err => {
                    console.log(err);
                });
        },
        // 获取天气数据
        fetchWeatherData(cityId) {
            axios
                .get(`https://devapi.qweather.com/v7/weather/3d?key=${this.apiKey}&location=${cityId}`)
                .then(res => {
                    this.weatherData = res.data.daily;
                })
                .catch(err => {
                    console.log(err);
                });
        },
        // 获取空气质量数据
        fetchAirQuality(cityId) {
            axios
                .get(`https://devapi.qweather.com/v7/air/5d?key=${this.apiKey}&location=${cityId}`)
                .then(res => {
                    this.airQualities = res.data.daily;
                })
                .catch(err => {
                    console.log(err);
                });
        },
        // 点击搜索
        clickSearch(city) {
            this.city = city;
            this.queryWeather();
        }
    }
});

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数…

标准更新丨美国发布玩具安全标准ASTM F963-23

2023年10月13日&#xff0c;美国材料试验协会 (ASTM)发布了玩具安全标准ASTM F963-23。新版标准主要修订了声响、电池可触及性、膨胀材料和弹射玩具的技术要求&#xff0c;另外&#xff0c;澄清和调整了邻苯二甲酸酯、玩具基材重金属的豁免以及溯源标签的要求&#xff0c;使其保…

vim相关指令

vim的各种模式及其转换关系图 vim 默认处于命令模式&#xff01;&#xff01;&#xff01; 模式之间转换的指令 除【命令模式】之外&#xff0c;其它模式要切换到【命令模式】&#xff0c;只需要无脑 ESC 即可&#xff01;&#xff01;&#xff01; [ 命令模式 ] 切换至 [ 插…

SQL优化之EXPLAIN执行计划(转载)

目录 第一章、快速了解EXPLAIN1.1&#xff09;EXPLAIN是什么1.2&#xff09;示例 第二章、结果列说明2.1&#xff09;id 与table2.2&#xff09;select_type&#xff1a;2.3&#xff09;type2.4&#xff09;possible_keys与key2.5&#xff09; key_len2.6&#xff09;rows2.7&a…

Android 加密之 打包为arr 项目依赖或者为jar

Android 加密之 打包为arr 项目依赖或者为jar 1. 修改build.gradle plugins {//id com.android.application// 1. 修改为libraryid com.android.library }android {namespace com.dzq.iccid2compileSdk 33defaultConfig {//applicationId "com.dzq.iccid2"// 2. 注…

Docker容器基本操作从入门到大牛

1. Docker安装部署 1.1 openEuler使用YUM安装 [rootnode1 ~]# yum install docker -y [rootnode1 ~]# docker version Client:Version: 18.09.0EulerVersion: 18.09.0.332API version: 1.39Go version: go1.17.3Git commit: 9942888Built…

基于PyTorch神经网络进行温度预测——基于jupyter实现

导入环境 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline读取文件 ### 读取数据文件 features pd.read_csv(temps.…

突破编程_前端_SVG(rect 矩形)

1 rect 元素的基本属性和用法 在SVG中&#xff0c;<rect> 元素用于创建矩形。 <rect> 元素有一些基本的属性&#xff0c;可以用来定义矩形的形状、位置、颜色等。以下是这些属性的详细解释&#xff1a; x 和 y &#xff1a;这两个属性定义矩形左上角的位置。 x …

供应链复杂业务实时数仓建设之路

供应链复杂业务实时数仓建设之路 背景 供应链业务是纷繁复杂的&#xff0c;我们既有 JIT 的现货模式中间夹着这大量的仓库作业环节&#xff0c;又有到仓的寄售&#xff0c;品牌业务&#xff0c;有非常复杂的逆向链路。在这么复杂的业务背后&#xff0c;我们需要精细化关注人货…

JVM复习

冯诺依曼模型与计算机处理数据过程相关联&#xff1a; 冯诺依曼模型&#xff1a; 输入/输出设备存储器输出设备运算器控制器处理过程&#xff1a; 提取阶段&#xff1a;输入设备传入原始数据&#xff0c;存储到存储器解码阶段&#xff1a;由CPU的指令集架构ISA将数值解…

6.4Python之字典的可变数据类型

字典是不可变数据类型&#xff0c;但其值都是可变数据类型。添加修改删除&#xff0c;都是通过改变寻址的方式做数据的变化。 例如&#xff1a; d1 {"a": 1, "b": 2, "c": 5} print(d1) print(id(d1)) print(d1["c"], "的ID&a…

策略者模式(代码实践C++/Java/Python)————设计模式学习笔记

文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类&#xff08;把行为接口作为类成员&#xff09;2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C&#xff08;用到了大量C2.0的知识&…

笔记本台式机电脑 “睡眠和休眠”有什么区别,那个更省电

笔记本台式机电脑 Windows 系统里睡眠和休眠有什么区别&#xff0c;睡眠和休眠那个更省电&#xff0c;睡眠和休眠使用那个更好&#xff0c;当不用电脑时&#xff0c;通常有三种方式让电脑休息&#xff1a;关机、睡眠和休眠。关机的定义大家都懂&#xff0c;但睡眠和休眠就容易让…

IEDA 启动项目时出现 java: java.lang.OutOfMemoryError: GC overhead limit exceeded 异常

问题 通过Idea启动项目时&#xff0c;出现java: java.lang.OutOfMemoryError: GC overhead limit exceeded 内存溢出问题&#xff1b; 解决方案 错误是发生在编译阶段&#xff0c;而不是运行阶段&#xff1a; 【1】idea编译Java项目使用的虚拟机和idea软件自身使用的虚拟机是…

APP开发教学:开发同城O2O外卖跑腿系统源码详解

同城O2O外卖跑腿系统&#xff0c;满足了人们对于外卖送餐和生活服务的需求。今天&#xff0c;小编将为您讲解如何开发同城O2O外卖跑腿系统源码。 1.前期准备 首先&#xff0c;我们需要明确系统的功能需求和用户需求&#xff0c;包括外卖订购、配送员接单、支付功能等。其次&am…

SPP论文笔记

这篇论文讨论了在深度卷积网络中引入空间金字塔池化&#xff08;SPP&#xff09;层的方法&#xff0c;以解决传统深度卷积网络需要固定图像尺寸的限制。以下是论文各部分的总结&#xff1a; 1. 引言 论文指出现有的深度卷积神经网络&#xff08;CNN&#xff09;需要固定大小的…

计算机毕业设计Python+Flask电商商品推荐系统 商品评论情感分析 商品可视化 商品爬虫 京东爬虫 淘宝爬虫 机器学习 深度学习 人工智能 知识图谱

一、选题背景与意义 1.国内外研究现状 国外研究现状&#xff1a; 亚马逊&#xff08;Amazon&#xff09;&#xff1a;作为全球最大的电商平台之一&#xff0c;亚马逊在数据挖掘和大数据方面具有丰富的经验。他们利用Spark等大数据技术&#xff0c;构建了一套完善的电商数据挖…

CTF之game1

拿到题目&#xff0c;真不错先玩几把。 对比一下不同分数的包&#xff0c;发现 分数不同时不同的包差距在于 score和 sign 对比sign发现 sign是由 zM **** 构成 再拿一个sign去md5解密和base64解码一下发现 sign zM base64(score) 接着便改一下包把分数改成不可能有…

React Hooks 全解: 常用 Hooks 及使用场景详解

React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。 React 中常用的 10 个 Hooks,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect、useImperativeHandle 和 useDebugValue。这些…

Linux的内存管理子系统

大家好&#xff0c;今天给大家介绍Linux的内存管理子系统&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 Linux的内存管理子系统是Linux内核中一个非常重要且复杂的子系统&#…