'use client';
import { useReducer, useEffect } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
interface FlipCardProps {
value: number;
label: string;
maxDigits?: number;
}
interface FlipDigitProps {
digit: number;
prevDigit: number;
}
function FlipDigit({ digit, prevDigit }: FlipDigitProps) {
return (
{/* 背景卡片 - 静态显示当前数字 */}
{/* 翻转动画层 */}
{/* 上半部分翻转 */}
{prevDigit}
{/* 下半部分翻转 */}
{digit}
{/* 侧面阴影增强立体感 */}
);
}
function FlipCard({ value, label, maxDigits = 2 }: FlipCardProps) {
const [state, dispatch] = useReducer(
(prev: { current: number; previous: number }, next: number) => {
if (next === prev.current) {
return prev;
}
return { current: next, previous: prev.current };
},
{ current: value, previous: value }
);
useEffect(() => {
dispatch(value);
}, [value]);
const formatNumber = (num: number) => {
const str = num.toString().padStart(maxDigits, '0');
return str.split('').map(c => parseInt(c));
};
const currentDigits = formatNumber(state.current);
const prevDigits = formatNumber(state.previous);
return (
{currentDigits.map((digit, index) => (
))}
{label}
);
}
interface FlipClockProps {
years: number;
months: number;
days: number;
}
export function FlipClock({ years, months, days }: FlipClockProps) {
return (
运营时长
自 2026 年 1 月 15 日 成立以来
持续打磨产品,致力于为企业提供优质的数字化转型服务
);
}