Skip to content

Commit

Permalink
Fix visualizer intersection observer
Browse files Browse the repository at this point in the history
  • Loading branch information
delasy committed Oct 19, 2024
1 parent ab73918 commit 969ad36
Showing 1 changed file with 20 additions and 27 deletions.
47 changes: 20 additions & 27 deletions components/Visualizer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,13 @@ export function Visualizer({
const interval = React.useRef<ReturnType<typeof setTimeout> | null>(null);
const timeout = React.useRef<ReturnType<typeof setTimeout> | null>(null);
const canvas = React.useRef<HTMLCanvasElement | null>(null);
const visible = React.useRef(false);
const [running, setRunning] = React.useState(false);

React.useEffect(() => {
if (
canvas.current !== null &&
visualizer.ready &&
canvas.current !== null &&
renderer.current === null
) {
renderer.current = new Renderer(
Expand All @@ -60,9 +61,9 @@ export function Visualizer({
setRunning(true);

interval.current = setInterval(() => {
// if (!running) {
// return;
// }
if (!visible.current) {
return;
}

if (!simulator.current.finished()) {
simulator.current.step();
Expand Down Expand Up @@ -95,23 +96,17 @@ export function Visualizer({
return;
}

const observer = new IntersectionObserver(handleObserving, {
threshold: 0,
const observer = new IntersectionObserver(([entry]) => {
visible.current = entry.isIntersecting;
});

observer.observe(canvas.current);

return () => {
if (canvas.current) {
observer.unobserve(canvas.current);
}
observer.disconnect();
};
}, [canvas]);

function handleObserving([entry]: IntersectionObserverEntry[]) {
// running.current = !entry.isIntersecting;
}

React.useEffect(() => {
return () => {
if (interval.current) {
Expand All @@ -124,20 +119,18 @@ export function Visualizer({
}, []);

return (
<>
<div className="flex flex-col gap-1">
<canvas ref={canvas} />
<div>
{controls && (
<div className="flex gap-2 justify-center py-2">
<Button onClick={startSimulation} disabled={running}>
Replay
</Button>
<Button disabled={running} onClick={onReset}>
Reset
</Button>
</div>
)}
</div>
</>
{controls && (
<div className="flex gap-2 justify-center py-2">
<Button disabled={running} onClick={startSimulation}>
Replay
</Button>
<Button disabled={running} onClick={onReset}>
Reset
</Button>
</div>
)}
</div>
);
}

0 comments on commit 969ad36

Please sign in to comment.