/** * Loading component with green theme */ import { useEffect, useState } from 'react'; interface LoadingProps { message?: string; showProgress?: boolean; } export function Loading({ message = "正在加载深空探索器...", showProgress = true }: LoadingProps) { const [dots, setDots] = useState(''); const [progress, setProgress] = useState(0); // Animate dots useEffect(() => { const interval = setInterval(() => { setDots(prev => prev.length >= 3 ? '' : prev + '.'); }, 500); return () => clearInterval(interval); }, []); // Simulate progress useEffect(() => { if (!showProgress) return; const interval = setInterval(() => { setProgress(prev => { if (prev >= 90) return prev; // Stop at 90% until real data loads return prev + Math.random() * 10; }); }, 300); return () => clearInterval(interval); }, [showProgress]); return (
{/* Starfield background effect */}
{[...Array(50)].map((_, i) => (
))}
{/* Loading content */}
{/* Spinning loader with green theme */}
{/* Outer ring */}
{/* Spinning ring */}
{/* Inner glow */}
{/* Center icon */}
{/* Loading text with green theme */}
{message}{dots}
{/* Subtitle */}
加载天体模型与轨道数据
{/* Progress bar */} {showProgress && (
{Math.round(progress)}%
)}
{/* Add twinkle animation */}
); }