/* 文旅主题加载动画样式 */ /* 加载器容器 */ .page-loader { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, #0a0e27 0%, #1a2947 50%, #0a0e27 100%); z-index: 10000; display: flex; align-items: center; justify-content: center; transition: opacity 0.8s ease, visibility 0.8s ease; } .page-loader.fade-out { opacity: 0; visibility: hidden; } /* 加载内容容器 */ .loader-content { position: relative; width: 400px; height: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center; } /* 飞机路径动画 */ .plane-container { position: absolute; width: 300px; height: 200px; top: 50%; left: 50%; transform: translate(-50%, -50%); } .plane-path { width: 100%; height: 100%; } .flight-path { animation: drawPath 2s ease infinite; } @keyframes drawPath { 0% { stroke-dashoffset: 400; opacity: 0; } 50% { opacity: 0.5; } 100% { stroke-dashoffset: 0; opacity: 0; } } /* 飞机动画 */ .plane { position: absolute; font-size: 24px; color: #00b4d8; animation: fly 2s ease-in-out infinite; filter: drop-shadow(0 4px 8px rgba(0, 180, 216, 0.3)); } .plane i { display: block; transform: rotate(-45deg); } @keyframes fly { 0% { left: 10%; top: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0; } 50% { left: 50%; top: 25%; transform: translate(-50%, -50%) scale(1.2); opacity: 1; } 100% { left: 90%; top: 50%; transform: translate(-50%, -50%) scale(0.8); opacity: 0; } } /* 世界地图点动画 */ .map-outline { position: absolute; width: 400px; height: 200px; top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0.3; } .map-outline circle { animation: pulse 2s ease-in-out infinite; } .map-outline circle:nth-child(1) { animation-delay: 0s; } .map-outline circle:nth-child(2) { animation-delay: 0.2s; } .map-outline circle:nth-child(3) { animation-delay: 0.4s; } .map-outline circle:nth-child(4) { animation-delay: 0.6s; } .map-outline circle:nth-child(5) { animation-delay: 0.8s; } @keyframes pulse { 0%, 100% { r: 3; opacity: 0.3; } 50% { r: 8; opacity: 0.8; } } /* 护照戳动画 */ .passport-stamps { position: absolute; width: 100%; height: 100%; pointer-events: none; } .stamp { position: absolute; padding: 8px 20px; border: 3px solid; border-radius: 8px; font-weight: bold; text-transform: uppercase; opacity: 0; transform: rotate(-15deg) scale(1.5); animation: stampIn 0.6s ease forwards; } .stamp-1 { top: 20%; left: 15%; color: #ff6b35; border-color: #ff6b35; animation-delay: 0.3s; } .stamp-2 { top: 25%; right: 20%; color: #00b4d8; border-color: #00b4d8; transform: rotate(10deg) scale(1.5); animation-delay: 0.6s; } .stamp-3 { bottom: 25%; left: 50%; transform: translateX(-50%) rotate(-5deg) scale(1.5); color: #90e0ef; border-color: #90e0ef; animation-delay: 0.9s; } @keyframes stampIn { 0% { opacity: 0; transform: rotate(-15deg) scale(2) translateY(-20px); } 50% { opacity: 1; transform: rotate(-15deg) scale(0.9) translateY(0); } 70% { transform: rotate(-15deg) scale(1.1) translateY(0); } 100% { opacity: 0.2; transform: rotate(-15deg) scale(1) translateY(0); } } /* 加载文字 */ .loader-text { position: relative; z-index: 10; text-align: center; margin-top: 50px; } .loader-text h3 { color: #fff; font-size: 28px; font-weight: 700; margin-bottom: 15px; letter-spacing: 2px; background: linear-gradient(135deg, #00b4d8, #90e0ef, #ff6b35); -webkit-background-clip: text; -webkit-text-fill-color: transparent; animation: shimmer 2s ease infinite; } @keyframes shimmer { 0%, 100% { opacity: 0.8; } 50% { opacity: 1; } } /* 加载点动画 */ .loading-dots { display: flex; gap: 8px; justify-content: center; } .loading-dots span { width: 10px; height: 10px; background: #00b4d8; border-radius: 50%; animation: dotPulse 1.5s ease infinite; } .loading-dots span:nth-child(1) { animation-delay: 0s; } .loading-dots span:nth-child(2) { animation-delay: 0.2s; } .loading-dots span:nth-child(3) { animation-delay: 0.4s; } @keyframes dotPulse { 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; } 40% { transform: scale(1.2); opacity: 1; } } /* 进度条 */ .loader-progress { position: absolute; bottom: 80px; left: 50%; transform: translateX(-50%); width: 200px; height: 4px; background: rgba(255, 255, 255, 0.1); border-radius: 2px; overflow: hidden; } .progress-bar { height: 100%; background: linear-gradient(90deg, #00b4d8, #90e0ef, #ff6b35); border-radius: 2px; animation: progress 2s ease forwards; } @keyframes progress { 0% { width: 0; } 100% { width: 100%; } } /* 响应式设计 */ @media (max-width: 768px) { .loader-content { width: 300px; height: 300px; } .plane-container { width: 250px; height: 150px; } .map-outline { width: 300px; height: 150px; } .loader-text h3 { font-size: 24px; } .stamp { font-size: 12px; padding: 6px 15px; } .loader-progress { width: 150px; bottom: 60px; } } /* 快速加载模式 */ .page-loader.quick-load .progress-bar { animation-duration: 0.8s; } .page-loader.quick-load .plane { animation-duration: 1s; } .page-loader.quick-load .stamp { animation-duration: 0.3s; }