import React, { useEffect, useState } from "react"; import clsx from "clsx"; import Image from "next/image"; const rotationDuration = 3800; const bezier = "cubic-bezier(0.645,0.045,0.355,1)"; function Coin(props: { frontList: boolean[]; rotation: boolean; onTransitionEnd: any; }) { const [lastFront, setLastFront] = useState(props.frontList); useEffect(function () { if (!props.rotation) { return; } let id = setTimeout(function () { setLastFront(props.frontList); props.onTransitionEnd(); }, rotationDuration); return () => clearTimeout(id); }); return (
{props.frontList.map((value, index) => ( ))}
); } function CoinItem(props: { front: boolean; lastFront: boolean; rotation: boolean; onTransitionEnd?: any; }) { let animate = ""; if (props.rotation) { // animate-[coin-front-front_3.8s_cubic-bezier(0.645,0.045,0.355,1)] // animate-[coin-front-back_3.8s_cubic-bezier(0.645,0.045,0.355,1)] // animate-[coin-back-front_3.8s_cubic-bezier(0.645,0.045,0.355,1)] // animate-[coin-back-back_3.8s_cubic-bezier(0.645,0.045,0.355,1)] animate = `animate-[coin-${getFront(props.lastFront)}-${getFront( props.front, )}_${rotationDuration / 1000}s_${bezier}]`; } return (
coin coin
); } function getFront(front: boolean): string { return front ? "front" : "back"; } export default Coin;