vue3-高德地图天气小组件

效果图
在这里插入图片描述

使用方法

<weather-view type="rect-solid" :borderColor="['#7ACAEC', '#068BBD']"></weather-view>

天气图标文件夹 本来想全弄成svg动态图片的,但找了很久都没找到对应的图(只找到了几个),于是就暂时搁置了

组件全代码如下 注意getWeather方法中的高德天气key需要改成自己的

<template><div class="dv-component-weather" :style="{ width: width, height: height }"><div class="dv-time"><span v-text="time"></span><span v-text="date"></span></div><div class="dv-weather"><img :src="icon" /><div><span v-text="weather"></span><span v-text="temperature" class="temperature"></span><span v-text="city"></span></div></div><div class="dv-box-border"><dv-border-box-13 v-if="type == 'normal'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-13><dv-border-box-12 v-if="type == 'rect-horn'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-12><dv-border-box-10 v-if="type == 'rect-horn-big'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-10><dv-border-box-8 v-if="type == 'rotate'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-8><dv-border-box-9 v-if="type == 'rect'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-9><dv-border-box-7 v-if="type == 'shadow'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-7><dv-border-box-2 v-if="type == 'rect-solid'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-2></div></div>
</template>
<script>
import { ref, onMounted } from "vue";
/*** 获取指定的cookie值* @param {string} name 要查询的Cookie字段名*/
function getCookie(name) {var arr,reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");if ((arr = document.cookie.match(reg))) return decodeURIComponent(arr[2]);else return "";
}
/*** 删除指定的cookie值* @param {string} name 要删除的Cookie字段名*/
function removeCookie(name) {let date = new Date();date.setTime(date.getTime() - 1);document.cookie = name + "=''" + "; expires=" + date.toUTCString();
}
/*** 格式化日期字符串* @param {string} 日期字符串 2021-04-10或可以转换为日期的其他格式* @param {object} 配置项:hasTime-是否带有时间 datelabel-日期分隔符 timelabel-时间分隔符 separator-日期与时间的分隔符*/
function dateFormatter(date, options) {options = options ? options : {};options.datelabel = options.datelabel ? options.datelabel : "-"; //日期分隔符options.timelabel = options.timelabel ? options.timelabel : ":"; //时间分隔符options.separator = options.separator ? options.separator : " "; //日期时间分隔符options.hasTime = options.hasTime ? options.hasTime : false; //返回值是否带时间options.hasWeek = options.hasWeek ? options.hasWeek : false; //返回值是否带星期options.hasTimeUnit = options.hasTimeUnit ? options.hasTimeUnit : false; //是否使用时间单位options.hasDateUnit = options.hasDateUnit ? options.hasDateUnit : false; //是否使用日期单位//是否返回格式化后的数组 若为true,则返回值为一个对象,formatter为自定义格式,array为格式化后的字符串信息options.hasArray = options.hasArray ? options.hasArray : false;let d = new Date(date);let year = d.getFullYear();let month = d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1;let day = d.getDate() < 10 ? "0" + d.getDate() : d.getDate();let hours = d.getHours() < 10 ? "0" + d.getHours() : d.getHours();let minute = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();let second = d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds();let formatterArray = [];let formatter = "";if (options.hasDateUnit == true) {formatter = year + "年" + month + "月" + day + "日";} else {formatter = year + options.datelabel + month + options.datelabel + day;}formatterArray.push(formatter);if (options.hasTime == true && options.hasTimeUnit == false) {formatter += options.separator + hours + options.timelabel + minute + options.timelabel + second;formatterArray.push(hours + options.timelabel + minute + options.timelabel + second);} else if (options.hasTime == true && options.hasTimeUnit == true) {formatter += options.separator + hours + "时" + minute + "分" + second + "秒";formatterArray.push(hours + "时" + minute + "分" + second + "秒");} else if (options.hasTime == false && options.hasTimeUnit == false) {formatterArray.push(hours + options.timelabel + minute + options.timelabel + second);} else if (options.hasTime == false && options.hasTimeUnit == true) {formatterArray.push(hours + "时" + minute + "分" + second + "秒");}let weekList = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];if (options.hasWeek == true) {formatter += " " + weekList[d.getDay()];formatterArray.push(weekList[d.getDay()]);} else {formatterArray.push(weekList[d.getDay()]);}if (options.hasArray == true) {return {formatter: formatter,array: formatterArray,};}return formatter;
}
export default {name: "weatherView",setup(prop, ctx) {let time = ref("");let date = ref("");let weather = ref("");let temperature = ref("");let city = ref("");let icon = ref("");let getDateTime = () => {let d = dateFormatter(new Date(), { hasArray: true });time.value = d.array[1];date.value = d.array[0] + " " + d.array[2];};let setWeather = (data) => {city.value = data.city;weather.value = data.weather;temperature.value = data.temperature + "℃";icon.value = "./images/weather/" + data.weather + ".svg";};let getWeather = () => {let xhr = new XMLHttpRequest();// 个人key(每天30W次,每秒200并发): 8bed5b0020bc38b52cfa6166a7babffexhr.open("get", "http://restapi.amap.com/v3/weather/weatherInfo?city=230100&key=此处填写自己的高德天气接口的key值");xhr.onload = (e) => {if (e.target.readyState == 4) {let res = JSON.parse(e.target.responseText);if (res.infocode === "10000") {res = res.lives[0];setWeather(res);let info = {city: res.city,weather: res.weather,temperature: res.temperature,};let delay = new Date();delay.setHours(delay.getHours() + 1);document.cookie = "_dv_gdweather=" + JSON.stringify(info) + "; expires=" + delay.toUTCString();} else {console.log("weather_error:", "infocode is " + res.infocode + "!");}}};xhr.send();};onMounted(() => {getDateTime();let _dv_gdweather = getCookie("_dv_gdweather");if (!_dv_gdweather) {getWeather();} else {setWeather(JSON.parse(_dv_gdweather));}// 动态设置时间-每秒变化setInterval(() => {getDateTime();}, 1000);// 动态设置天气-每小时setInterval(() => {getWeather();}, 1000 * 60 * 60 + 1);});return {icon,time,date,weather,city,temperature,};},props: {type: {type: String,default: "normal",},width: {type: String,default: "100%",},height: {type: String,default: "100%",},borderColor: {type: Array,default: () => {// return ["#295B6B", "#3C538F"];return ["#295B6B"];},},backColor: {type: String,default: "transparent",},},
};
</script>
<style lang="scss" scoped>
$font: 0.18rem;
.dv-component-weather {font-size: $font;// color: #fff;color: rgb(188, 239, 243);position: relative;display: flex;align-items: center;justify-content: space-between;padding: 0.15rem;box-sizing: border-box;.dv-box-border {position: absolute;width: 100%;height: 100%;top: 0;left: 0;z-index: 1;}.dv-time {// font-size: #{$font * 1.2};display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100%;width: 53%;white-space: nowrap;position: relative;z-index: 2;span {&:first-child {font-size: #{$font * 1.8};}&:last-child {font-size: #{$font * 1};}}}.dv-weather {height: 100%;width: 47%;display: flex;align-items: center;justify-content: space-between;font-size: #{$font * 0.8};position: relative;z-index: 2;img {width: 0.7rem;height: 0.7rem;}div {flex: 1;display: flex;flex-direction: column;justify-content: flex-start;align-items: flex-start;span {margin-bottom: 0.05rem;&:first-child {font-size: #{$font * 0.7};}&:last-child {font-size: #{$font * 0.7};margin: 0;}}}}
}
</style>

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

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

相关文章

缓存框架JetCache源码解析-缓存定时刷新

作为一个缓存框架&#xff0c;JetCache支持多级缓存&#xff0c;也就是本地缓存和远程缓存&#xff0c;但是不管是使用着两者中的哪一个或者两者都进行使用&#xff0c;缓存的实时性一直都是我们需要考虑的问题&#xff0c;通常我们为了尽可能地保证缓存的实时性&#xff0c;都…

酒吧收银系统解决方案——未来之窗行业应用跨平台架构

一、酒吧管理数字化 1. 提高效率&#xff1a;能够快速处理订单&#xff0c;减少顾客等待时间&#xff0c;提高服务效率&#xff0c;从而提升顾客满意度。 2. 精确计费&#xff1a;准确计算酒水、小吃等各类消费项目的费用&#xff0c;避免人工计算错误导致的经济损失。 3. 库存…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…

windows下Qt的安装方法

Qt Creator是个人非常喜欢的一款开发工具&#xff0c;喜欢用其来开发C和CPC平台项目&#xff0c;当然也可以用其来开发Android和Auto平台项目&#xff0c;但其现在采用离线安装&#xff0c;限于网络问题&#xff0c;安装速度非常慢。 现在介绍一种可以完成快速的安装方法。 下…

群晖通过 Docker 安装 MySQL

1. 打开 Docker 应用&#xff0c;并在注册表搜索 MySQL 2. 下载 MySQL 镜像&#xff0c;并选择版本 3. 在 Docker 文件夹中创建 MySQL&#xff0c;并创建子文件夹 4. 设置权限 5. 选择 MySQL 映像运行&#xff0c;创建容器 6. 配置 MySQL 容器 6.1 使用高权限执行容器 6.2 启…

圆周率的估算

圆周率的估算有多种方案&#xff1a; 方案一&#xff1a;无穷级数4/1 - 4/3 4/5 - 4/7 ……的和是圆周率π&#xff0c;这一无穷级数前n项的和即可估算圆周率值。 方案二&#xff1a;利用求单位正方形与内接圆面积的比例关系来求的π的近似值。单位圆的1/4面积是一个扇形&am…

Java调用大模型 - Spring AI 初体验

Spring AI&#xff1a;为Java开发者提供高效的大模型应用框架 当前Java调用大模型时面临缺乏高效AI应用框架的问题。Spring作为资深的Java应用框架提供商&#xff0c;通过推出Spring AI来解决这一挑战。它借鉴了LangChain的核心理念&#xff0c;并结合了Java面向对象编程的优势…

Linux隐藏权限介绍

隐藏权限概览 在Linux系统中&#xff0c;有时即便是以root用户身份&#xff0c;你也可能遇到无法修改特定文件的情况。这种限制往往源自chattr命令的应用&#xff0c;该命令用于为文件或目录设置“隐藏权限”&#xff0c;即底层属性&#xff0c;以增强系统安全性。值得注意的是…

100个人物介绍字幕动画PR视频模板MOGRT

Premiere Pro 模板&#xff0c;5类100个人物介绍(用户)界面元素PR剪辑视频素材包。 不需要插件。 通用表达式。 模块化结构。 组织良好。 快速简单的定制。 https://prmuban.com/41688.html

华为原生鸿蒙操作系统正式发布,为开发者开启的全新机遇与挑战

华为原生鸿蒙操作系统正式发布&#xff1a;开启全场景智能生活新篇章 概述 2024年10月22日&#xff0c;华为在“原生鸿蒙之夜暨华为全场景新品发布会”上正式发布了我国首个国产移动操作系统——华为原生鸿蒙操作系统&#xff08;HarmonyOS NEXT&#xff09;。这标志着华为在…

AI大模型平台详解与AI创作示范

AI大模型平台详解与AI创作示范 在全球人工智能&#xff08;AI&#xff09;领域&#xff0c;中国的AI大模型平台取得了快速发展&#xff0c;涌现了多个具有代表性的平台&#xff0c;诸如百度的飞桨&#xff08;PaddlePaddle&#xff09;、阿里的达摩院M6、华为的MindSpore、腾讯…

JMeter详细介绍和相关概念

JMeter是一款开源的、强大的、用于进行性能测试和功能测试的Java应用程序。 本篇承接上一篇 JMeter快速入门示例 &#xff0c; 对该篇中出现的相关概念进行详细介绍。 JMeter测试计划 测试计划名称和注释&#xff1a;整个测试脚本保存的名称&#xff0c;以及对该测试计划的注…

【日志】Unity3D模型导入基本问题以及浅谈游戏框架

2024.10.22 真正的谦逊从来不是人与人面对时的谦卑&#xff0c;而是当你回头看那个曾经的自己时&#xff0c;依旧保持肯定与欣赏。 【力扣刷题】 暂无 【数据结构】 暂无 【Unity】 导入外部模型资源报错问题 在导入外部资源包的时候一般都会报错&#xff0c;不是这个资源模…

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备的多维拓展与灵活应用

在数字化安防时代&#xff0c;NVR批量管理软件/平台EasyNVR作为一种先进的视频监控系统设备&#xff0c;正逐步成为各个领域监控解决方案的首选。NVR批量管理软件/平台EasyNVR作为一款基于端-边-云一体化架构的国标视频融合云平台&#xff0c;凭借其部署简单轻量、功能多样、兼…

优化多表联表查询的常见方法归纳

目录 一、使用mybatis的嵌套查询 二、添加表冗余字段&#xff0c;减少联表查询需求 三、分表预处理&#xff0c;前端再匹配 一、使用mybatis的嵌套查询 【场景说明】 前端需要展示一张列表&#xff0c;其中的字段来源于多张表&#xff0c;如何进行查询优化&#xff1f; 【…

鸿蒙网络编程系列32-基于拦截器的性能监控示例

1. 拦截器简介 在Web开发中拦截器是一种非常有用的模式&#xff0c;它允许开发者在请求发送到服务器之前或响应返回给客户端之前执行一些预处理或后处理操作。这种机制特别适用于需要对所有网络请求或响应进行统一处理的情况&#xff0c;比如添加全局错误处理、请求头的修改、…

PostgreSQL中触发器递归的处理 | 翻译

许多初学者在某个时候都会陷入触发器递归的陷阱。通常&#xff0c;解决方案是完全避免递归。但对于某些用例&#xff0c;您可能必须处理触发器递归。本文将告诉您有关该主题需要了解的内容。如果您曾经被错误消息“超出堆栈深度限制”所困扰&#xff0c;那么这里就是解决方案。…

电脑视频剪辑大比拼,谁更胜一筹?

随着短视频的火爆&#xff0c;越来越多的人开始尝试自己动手制作视频&#xff0c;无论是记录生活点滴还是创作个性短片&#xff0c;一款好用的视频剪辑软件是必不可少的。今天&#xff0c;我们就从短视频运营的角度&#xff0c;来聊聊几款热门的电脑视频剪辑软件&#xff0c;看…

FineReport 数据筛选过滤

从大量的数据当中&#xff0c;获取到符合条件的数据&#xff0c;经常会使用到数据筛选过滤功能&#xff0c;在FineReort产品中实现筛选过滤的方法有三种 1&#xff09;直接通过 SQL 语句取出满足条件的的数据&#xff0c;如修改数据集 SQL 语句为&#xff1a;SELECT * FROM 订单…

YOLOv8改进,YOLOv8采用WTConv卷积(感受野的小波卷积),二次创新C2f结构,ECCV 2024

摘要 WTConv(基于小波变换的卷积层),用于在卷积神经网络(CNN)中实现大感受野。作者通过利用小波变换,设计了一个卷积层,可以在保持少量可训练参数的情况下大幅扩大感受野。WTConv 被设计为可以无缝替换现有 CNN 架构中的深度卷积层,适用于图像分类、语义分割、物体检测…