Spaces:
Sleeping
Sleeping
File size: 1,978 Bytes
4bea261 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import { useEffect, useState } from 'react';
export default function SplashScreen() {
const [visible, setVisible] = useState(true);
const [fadeOut, setFadeOut] = useState(false);
useEffect(() => {
const show = () => {
setVisible(true);
setFadeOut(false);
};
const hide = () => {
setFadeOut(true);
setTimeout(() => setVisible(false), 600);
};
document.addEventListener('astro:before-preparation', show);
document.addEventListener('astro:after-preparation', hide);
// Initial hide for first page load
const timer = setTimeout(hide, 1000);
return () => {
document.removeEventListener('astro:before-preparation', show);
document.removeEventListener('astro:after-preparation', hide);
clearTimeout(timer);
};
}, []);
if (!visible) return null;
return (
<div
className={`fixed inset-0 z-[9999] flex flex-col items-center justify-center bg-[#0f0f0f] transition-opacity duration-500 ${fadeOut ? 'opacity-0 pointer-events-none' : 'opacity-100'}`}
>
<div className="relative mb-8 flex flex-col items-center">
<div className="relative w-80 h-32 overflow-hidden animate-pulse">
<img src="/logo-full.png" className="h-full w-full object-contain" alt="TPHIMX Full Logo" />
</div>
<div className="mt-4 text-[12px] font-black uppercase tracking-[0.6em] text-primary">Tuyệt mỹ từng khung hình</div>
<div className="mt-6 h-[2px] w-64 bg-gradient-to-r from-transparent via-primary to-transparent" />
</div>
<div className="flex gap-1.5">
{[0, 1, 2].map((i) => (
<div
key={i}
className="h-2.5 w-2.5 rounded-full bg-primary animate-bounce shadow-[0_0_8px_var(--primary)]"
style={{ animationDelay: `${i * 0.15}s` }}
/>
))}
</div>
<p className="mt-4 text-sm tracking-widest text-gray-500 uppercase">Đang tải...</p>
</div>
);
}
|