import React, { useEffect, useState } from 'react'; interface PageTransitionProps { children: React.ReactNode; className?: string; delay?: number; } /** * 页面过渡动画组件 * 提供平滑的页面切换效果 */ export const PageTransition: React.FC = ({ children, className = '', delay = 0 }) => { const [isVisible, setIsVisible] = useState(false); useEffect(() => { const timer = setTimeout(() => { setIsVisible(true); }, delay); return () => clearTimeout(timer); }, [delay]); return (
{children}
); }; /** * 交错动画容器 * 为子元素提供依次出现的动画效果 */ export const StaggeredContainer: React.FC<{ children: React.ReactNode; staggerDelay?: number; className?: string; }> = ({ children, staggerDelay = 100, className = '' }) => { return (
{React.Children.map(children, (child, index) => ( {child} ))}
); }; /** * 滑入动画组件 */ export const SlideIn: React.FC<{ children: React.ReactNode; direction?: 'left' | 'right' | 'up' | 'down'; delay?: number; className?: string; }> = ({ children, direction = 'up', delay = 0, className = '' }) => { const [isVisible, setIsVisible] = useState(false); useEffect(() => { const timer = setTimeout(() => { setIsVisible(true); }, delay); return () => clearTimeout(timer); }, [delay]); const getTransformClasses = () => { const transforms = { left: isVisible ? 'translate-x-0' : '-translate-x-8', right: isVisible ? 'translate-x-0' : 'translate-x-8', up: isVisible ? 'translate-y-0' : 'translate-y-8', down: isVisible ? 'translate-y-0' : '-translate-y-8' }; return transforms[direction]; }; return (
{children}
); }; /** * 缩放动画组件 */ export const ScaleIn: React.FC<{ children: React.ReactNode; delay?: number; className?: string; }> = ({ children, delay = 0, className = '' }) => { const [isVisible, setIsVisible] = useState(false); useEffect(() => { const timer = setTimeout(() => { setIsVisible(true); }, delay); return () => clearTimeout(timer); }, [delay]); return (
{children}
); }; /** * 悬停放大组件 */ export const HoverScale: React.FC<{ children: React.ReactNode; scale?: number; className?: string; }> = ({ children, scale = 1.05, className = '' }) => { return (
{children}
); }; /** * 悬停倾斜组件 */ export const HoverTilt: React.FC<{ children: React.ReactNode; degree?: number; className?: string; }> = ({ children, degree = 2, className = '' }) => { return (
{children}
); }; /** * 脉冲动画组件 */ export const Pulse: React.FC<{ children: React.ReactNode; className?: string; }> = ({ children, className = '' }) => { return (
{children}
); }; /** * 呼吸动画组件 */ export const Breathe: React.FC<{ children: React.ReactNode; className?: string; }> = ({ children, className = '' }) => { return (
{children}
); };