diff --git a/src/components/WrappedExperience.tsx b/src/components/WrappedExperience.tsx index 63f5decd..d7aeadc3 100644 --- a/src/components/WrappedExperience.tsx +++ b/src/components/WrappedExperience.tsx @@ -101,7 +101,38 @@ export default function WrappedExperience() { return () => controller.abort(); }, [selectedYear, reloadKey]); + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if (!slides.length) return; + + switch (event.key) { + case "ArrowLeft": + setSlide((value) => Math.max(0, value - 1)); + break; + + case "ArrowRight": + setSlide((value) => Math.min(slides.length - 1, value + 1)); + break; + + case "Home": + setSlide(0); + break; + + case "End": + setSlide(slides.length - 1); + break; + + default: + break; + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => { + window.removeEventListener("keydown", handleKeyDown); + }; + }, [slides.length]); const slides = useMemo(() => { if (!stats) return []; @@ -260,7 +291,10 @@ export default function WrappedExperience() { ) : stats && currentSlide ? ( <>
-