diff --git a/src/App.vue b/src/App.vue
index f8e940e..05fdd20 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -171,6 +171,17 @@
@@ -274,6 +286,7 @@ import HabitArea from './components/HabitArea.vue';
import ParentArea from './components/ParentArea.vue';
import CalendarArea from './components/CalendarArea.vue';
import RewardArea from './components/RewardArea.vue';
+import ExternalLearningArea from './components/ExternalLearningArea.vue';
const starEnergyStore = useStarEnergyStore();
const currentArea = ref('');
@@ -552,15 +565,17 @@ onUnmounted(() => {
/* 能量徽章 */
.energy-badge {
background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
- border-radius: 25px;
- padding: 8px 20px;
- box-shadow: 0 6px 20px rgba(255, 165, 0, 0.5);
+ border-radius: 30px;
+ padding: 10px 25px;
+ box-shadow: 0 8px 25px rgba(255, 165, 0, 0.6);
border: 3px solid #fff;
display: flex;
align-items: center;
gap: 15px;
transition: all 0.3s ease;
- animation: energyPulse 2s ease-in-out infinite;
+ animation: energyPulse 2s ease-in-out infinite, glow 3s ease-in-out infinite;
+ position: relative;
+ overflow: hidden;
}
.energy-badge:hover {
@@ -570,7 +585,24 @@ onUnmounted(() => {
@keyframes energyPulse {
0%, 100% { transform: scale(1); }
- 50% { transform: scale(1.05); }
+ 50% { transform: scale(1.08); }
+}
+
+.energy-badge::after {
+ content: '';
+ position: absolute;
+ top: -50%;
+ left: -50%;
+ width: 200%;
+ height: 200%;
+ background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ transform: rotate(45deg);
+ animation: shine 3s ease-in-out infinite;
+}
+
+@keyframes shine {
+ 0% { transform: translateX(-100%) rotate(45deg); }
+ 100% { transform: translateX(100%) rotate(45deg); }
}
.energy-stars {
@@ -776,6 +808,7 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
.calendar-icon .icon-glow { background: radial-gradient(circle, #87CEEB, transparent); }
.parent-icon .icon-glow { background: radial-gradient(circle, #98FB98, transparent); }
.reward-icon .icon-glow { background: radial-gradient(circle, #FF6B6B, transparent); }
+.external-icon .icon-glow { background: radial-gradient(circle, #FF6B6B, transparent); }
.home-icon { background: linear-gradient(135deg, #FFB6C1, #FF69B4); }
.knowledge-icon { background: linear-gradient(135deg, #B5EAD7, #4ECDC4); }
@@ -783,6 +816,7 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
.calendar-icon { background: linear-gradient(135deg, #87CEEB, #4682B4); }
.parent-icon { background: linear-gradient(135deg, #98FB98, #32CD32); }
.reward-icon { background: linear-gradient(135deg, #FF6B6B, #4ECDC4); }
+.external-icon { background: linear-gradient(135deg, #9370DB, #BA55D3); }
.nav-item:not(.active) .home-icon { background: linear-gradient(135deg, #FFE4E1, #FFB6C1); }
.nav-item:not(.active) .knowledge-icon { background: linear-gradient(135deg, #E0F7FA, #B5EAD7); }
@@ -790,6 +824,7 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
.nav-item:not(.active) .calendar-icon { background: linear-gradient(135deg, #E0FFFF, #87CEEB); }
.nav-item:not(.active) .parent-icon { background: linear-gradient(135deg, #F0FFF0, #98FB98); }
.nav-item:not(.active) .reward-icon { background: linear-gradient(135deg, #FFE6E6, #FF6B6B); }
+.nav-item:not(.active) .external-icon { background: linear-gradient(135deg, #E6E6FA, #9370DB); }
.nav-label {
font-size: 13px;
@@ -829,7 +864,42 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
@keyframes bounce {
0%, 100% { transform: translateY(0); }
- 50% { transform: translateY(-8px); }
+ 50% { transform: translateY(-10px); }
+}
+
+@keyframes sparkle {
+ 0%, 100% {
+ opacity: 1;
+ transform: scale(1) rotate(0deg);
+ }
+ 50% {
+ opacity: 0.8;
+ transform: scale(1.2) rotate(10deg);
+ }
+}
+
+@keyframes glow {
+ 0%, 100% {
+ box-shadow: 0 0 5px rgba(255, 215, 0, 0.5), 0 0 10px rgba(255, 215, 0, 0.3);
+ }
+ 50% {
+ box-shadow: 0 0 15px rgba(255, 215, 0, 0.8), 0 0 25px rgba(255, 215, 0, 0.5);
+ }
+}
+
+@keyframes floatUp {
+ 0%, 100% {
+ transform: translateY(0) translateX(0);
+ }
+ 25% {
+ transform: translateY(-5px) translateX(3px);
+ }
+ 50% {
+ transform: translateY(-10px) translateX(0);
+ }
+ 75% {
+ transform: translateY(-5px) translateX(-3px);
+ }
}
@keyframes wiggle {
@@ -851,23 +921,48 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
}
.adventure-btn {
- background: linear-gradient(135deg, #FF6B6B, #4ECDC4);
+ background: linear-gradient(135deg, #FF6B6B, #4ECDC4, #98FB98);
+ background-size: 200% 200%;
color: var(--white);
border: none;
- padding: 20px 40px;
- border-radius: 30px;
+ padding: 22px 45px;
+ border-radius: 35px;
font-size: 24px;
font-weight: bold;
font-family: var(--cartoon-font);
cursor: pointer;
transition: var(--transition);
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25);
display: flex;
align-items: center;
gap: 15px;
margin: 0 auto;
border: 4px solid var(--accent-color);
- animation: bounce 2s ease-in-out infinite;
+ animation: bounce 2s ease-in-out infinite, bgGradient 5s ease infinite;
+ position: relative;
+ overflow: hidden;
+}
+
+@keyframes bgGradient {
+ 0% { background-position: 0% 50%; }
+ 50% { background-position: 100% 50%; }
+ 100% { background-position: 0% 50%; }
+}
+
+.adventure-btn::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
+ animation: btnShine 3s ease-in-out infinite;
+}
+
+@keyframes btnShine {
+ 0% { left: -100%; }
+ 50%, 100% { left: 100%; }
}
.adventure-btn:hover {
@@ -969,9 +1064,9 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
left: -50%;
width: 200%;
height: 200%;
- background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+ background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.5), transparent);
transform: rotate(45deg);
- animation: shine 3s ease-in-out infinite;
+ animation: shine 4s ease-in-out infinite;
}
@keyframes shine {
@@ -979,6 +1074,15 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
100% { transform: translateX(100%) rotate(45deg); }
}
+.area-card::after {
+ content: '✨';
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ font-size: 20px;
+ animation: sparkle 2s ease-in-out infinite;
+}
+
.area-card::after {
content: '';
position: absolute;
@@ -1008,11 +1112,15 @@ header.app-header .nav-container nav.main-nav .nav-control-item {
}
.area-card:hover {
- transform: translateY(-10px) scale(1.05) rotate(2deg);
- box-shadow: var(--hover-shadow);
+ transform: translateY(-12px) scale(1.08) rotate(2deg);
+ box-shadow: var(--hover-shadow), 0 0 30px rgba(255, 105, 180, 0.3);
border-width: 6px;
}
+.area-card:active {
+ transform: translateY(-8px) scale(1.03) rotate(1deg);
+}
+
.area-icon {
width: 90px;
height: 90px;
diff --git a/src/components/AdventureArea.vue b/src/components/AdventureArea.vue
index 5e699b8..c62a634 100644
--- a/src/components/AdventureArea.vue
+++ b/src/components/AdventureArea.vue
@@ -279,13 +279,13 @@ const scenes = [
name: '星球探索',
description: '认识太阳系的行星',
icon: '🪐',
- reward: 10
+ reward: 1
},
{
name: '火箭发射',
description: '帮助火箭收集星星',
icon: '🚀',
- reward: 15
+ reward: 1
}
]
},
@@ -299,13 +299,13 @@ const scenes = [
name: '小鸟学飞',
description: '学习字母和飞行',
icon: '🐦',
- reward: 10
+ reward: 1
},
{
name: '云朵拼图',
description: '拼图游戏和形状认知',
icon: '☁️',
- reward: 12
+ reward: 1
}
]
},
@@ -319,13 +319,13 @@ const scenes = [
name: '海底寻宝',
description: '寻找宝藏和海洋生物',
icon: '🐟',
- reward: 10
+ reward: 1
},
{
name: '珊瑚礁保护',
description: '学习环保知识',
icon: '🪸',
- reward: 15
+ reward: 1
}
]
},
@@ -339,13 +339,13 @@ const scenes = [
name: '地鼠打洞',
description: '学习数字和方向',
icon: '🐹',
- reward: 8
+ reward: 1
},
{
name: '矿石开采',
description: '认识不同的矿石',
icon: '💎',
- reward: 12
+ reward: 1
}
]
},
@@ -359,13 +359,13 @@ const scenes = [
name: '森林动物',
description: '认识森林里的动物',
icon: '🐻',
- reward: 10
+ reward: 1
},
{
name: '植物生长',
description: '学习植物的生长过程',
icon: '🌱',
- reward: 12
+ reward: 1
}
]
}
@@ -463,8 +463,9 @@ const startActivity = (sceneId: string, activityIndex: number) => {
const completeActivity = () => {
const scene = getSceneById(currentScene.value!);
const activity = scene.activities[currentActivityIndex.value];
- starEnergyStore.addEnergy(activity.reward, 'adventure');
- alert(`活动完成!获得 ${activity.reward} 颗星星能量!`);
+ const reward = 1; // 所有活动完成后获得1颗星星
+ starEnergyStore.addEnergy(reward, 'adventure');
+ alert(`活动完成!获得 ${reward} 颗星星能量!`);
currentActivity.value = false;
};
diff --git a/src/components/AdventureMap.vue b/src/components/AdventureMap.vue
index a284836..f7f056d 100644
--- a/src/components/AdventureMap.vue
+++ b/src/components/AdventureMap.vue
@@ -105,7 +105,7 @@
星球探险
认识太阳系的所有行星,学习它们的特点
-
⭐ +15 能量
+
⭐ +1 能量
开始 →
@@ -116,7 +116,7 @@