天气卡片拉取成功

main
psnci6hgk 3 months ago
parent 9be71e864a
commit 2fad89a507

@ -9,6 +9,8 @@
<div class="community-scene">
<div class="scene-background">
<div class="background-image-container"></div>
<!-- 天气叠加层根据 weatherInfo.condition 动态添加样式 -->
<div v-if="weatherInfo" :class="['weather-overlay', weatherClass]"></div>
<!-- 添加天气信息显示 -->
<div v-if="weatherInfo" class="weather-widget">
<div class="weather-content">
@ -261,6 +263,18 @@ const currentMap = ref('')
const weatherInfo = ref(null)
const weatherLoading = ref(false)
// weatherInfo.condition CSS
const weatherClass = computed(() => {
if (!weatherInfo.value || !weatherInfo.value.condition) return ''
const c = String(weatherInfo.value.condition).toLowerCase()
if (/晴|clear|sunny/.test(c)) return 'wb-sunny'
if (/云|clouds|cloud/.test(c)) return 'wb-cloudy'
if (/雨|drizzle|rain|雷|thunder/.test(c)) return 'wb-rain'
if (/雪|snow/.test(c)) return 'wb-snow'
if (/雾|霾|fog|haze|mist|smoke|dust/.test(c)) return 'wb-haze'
return 'wb-default'
})
// OC schedule
const ocPositions = ref([])
// oc
@ -936,16 +950,16 @@ imageUrl
/* 天气组件样式 */
.weather-widget {
position: absolute;
top: 20px;
right: 20px;
top: 0px;
right: 0px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-radius: 12px;
padding: 10px; /* 减少内边距 */
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
z-index: 30;
min-width: 120px; /* 减小最小宽度 */
max-width: 140px; /* 添加最大宽度限制 */
min-width: 50px; /* 减小最小宽度 */
max-width: 120px; /* 添加最大宽度限制 */
}
.weather-content {
@ -1017,4 +1031,102 @@ imageUrl
display: block;
line-height: 1.2;
}
/* 天气覆盖层样式 */
.weather-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2; /* 位于背景(map)之上、地点图标之下(地点图标 z-index:10) */
pointer-events: none;
transition: opacity 0.6s ease;
}
/* 晴天:暖色渐变 + 太阳光环 */
.weather-overlay.wb-sunny {
background: linear-gradient(180deg, rgba(255,240,160,0.12), rgba(255,210,120,0.05));
}
.weather-overlay.wb-sunny::before {
content: "";
position: absolute;
right: 8%;
top: 8%;
width: 160px;
height: 160px;
background: radial-gradient(circle at 30% 30%, rgba(255,245,200,0.9) 0%, rgba(255,220,120,0.6) 30%, rgba(255,200,80,0.15) 60%, transparent 70%);
border-radius: 50%;
filter: blur(12px);
transform: translateZ(0);
animation: sunSlowRotate 12s linear infinite;
}
@keyframes sunSlowRotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* 多云:灰白云层覆盖(使用伪元素叠加多个模糊圆形) */
.weather-overlay.wb-cloudy {
background: linear-gradient(180deg, rgba(200,210,220,0.06), rgba(160,170,180,0.06));
}
.weather-overlay.wb-cloudy::before,
.weather-overlay.wb-cloudy::after {
content: "";
position: absolute;
left: 10%;
top: 5%;
width: 420px;
height: 120px;
background: radial-gradient(ellipse at center, rgba(255,255,255,0.85) 0%, rgba(240,240,240,0.9) 35%, rgba(220,220,220,0.95) 60%, rgba(200,200,200,0.95) 100%);
border-radius: 50%;
filter: blur(18px);
transform: translateX(0);
animation: cloudFloat 18s linear infinite;
}
.weather-overlay.wb-cloudy::after {
left: 48%;
top: 18%;
width: 360px;
height: 110px;
animation-duration: 22s;
}
@keyframes cloudFloat {
0% { transform: translateX(-6%); }
50% { transform: translateX(6%); }
100% { transform: translateX(-6%); }
}
/* 雨天:深色背景 + 动态雨线(用重复渐变模拟雨丝) */
.weather-overlay.wb-rain {
background: linear-gradient(180deg, rgba(30,40,50,0.18), rgba(20,25,30,0.2));
}
.weather-overlay.wb-rain::before {
content: "";
position: absolute;
inset: 0;
background-image: linear-gradient(transparent 70%, rgba(255,255,255,0.06) 70%);
background-size: 4px 40px;
opacity: 0.9;
animation: rainFall 0.8s linear infinite;
mix-blend-mode: screen;
}
@keyframes rainFall {
from { background-position: 0 -10px; }
to { background-position: 0 40px; }
}
/* 霾/雾:浅灰覆盖 + 模糊 */
.weather-overlay.wb-haze {
background: rgba(200,200,200,0.25);
backdrop-filter: blur(4px) saturate(0.9);
}
/* 默认轻微蒙层 */
.weather-overlay.wb-default {
background: rgba(0,0,0,0.02);
}
</style>
Loading…
Cancel
Save