"use client"; import { useState, useEffect, useRef } from "react"; import { Watch, Play, Pause, RotateCcw, Timer as TimerIcon } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; export default function StopwatchPage() { const [time, setTime] = useState(0); const [running, setRunning] = useState(false); const [laps, setLaps] = useState([]); const timerRef = useRef(null); useEffect(() => { if (running) { timerRef.current = setInterval(() => { setTime((prev) => prev + 10); }, 10); } else { clearInterval(timerRef.current); } return () => clearInterval(timerRef.current); }, [running]); const formatTime = (ms: number) => { const minutes = Math.floor(ms / 60000); const seconds = Math.floor((ms % 60000) / 1000); const milliseconds = Math.floor((ms % 1000) / 10); return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}.${milliseconds.toString().padStart(2, '0')}`; }; const handleLap = () => { setLaps([time, ...laps]); }; const handleReset = () => { setRunning(false); setTime(0); setLaps([]); }; return (

秒表

精确计时工具,支持计次功能

{formatTime(time)}
计次记录 共 {laps.length} 次 {laps.length === 0 ? (
暂无记录
) : ( laps.map((lap, i) => (
LAP {laps.length - i} {formatTime(lap)}
)) )}
); }