Spaces:
Running
Running
import { Dice1, Dice2, Dice3, Dice4, Dice5, Dice6 } from "lucide-react"; | |
import { FC, useState } from "react"; | |
const dices = [ | |
<Dice1 key="dice-1" />, | |
<Dice2 key="dice-2" />, | |
<Dice3 key="dice-3" />, | |
<Dice4 key="dice-4" />, | |
<Dice5 key="dice-5" />, | |
<Dice6 key="dice-6" />, | |
]; | |
export const Dice: FC = () => { | |
const [click, setClick] = useState(false); | |
const [currentNumber, setCurrentNumber] = useState(3); | |
const rollDice = () => { | |
let rollingTime = 0; | |
setClick(true); | |
const rollInterval = setInterval( | |
() => { | |
setCurrentNumber(Math.floor(Math.random() * 6)); | |
rollingTime += 100; | |
// Slow down the rolling | |
if (rollingTime >= 1200) { | |
clearInterval(rollInterval); | |
setClick(false); | |
} | |
}, | |
100 - rollingTime / 20, | |
); | |
}; | |
return ( | |
<div | |
className={click ? "animate-[shake_1.2s_ease-in-out]" : ""} | |
onClick={(event) => { | |
event.preventDefault(); | |
rollDice(); | |
}} | |
> | |
{dices[currentNumber]} | |
</div> | |
); | |
}; | |