Spaces:
Running
Running
File size: 1,254 Bytes
e16348e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import { useEffect, useState } from 'react';
const SCREENS = ['Board', 'Results', 'Moves'];
export default function ScreenNav() {
const [current, setCurrent] = useState(0);
useEffect(() => {
const content = document.querySelector('.content');
if (!content) return undefined;
const onScroll = () => setCurrent(Math.round(content.scrollLeft / content.clientWidth));
content.addEventListener('scroll', onScroll, { passive: true });
return () => content.removeEventListener('scroll', onScroll);
}, []);
function goTo(index) {
const content = document.querySelector('.content');
if (!content) return;
const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
content.scrollTo({ left: index * content.clientWidth, behavior: reduced ? 'auto' : 'smooth' });
}
return (
<nav className="screen-nav" aria-label="Screens">
{SCREENS.map((label, i) => (
<button key={label} type="button" className="screen-nav__item"
aria-current={i === current ? 'page' : undefined} onClick={() => goTo(i)}>
{label}
</button>
))}
</nav>
);
}
|