aiagentdlafirm/components/ScrollReveal.tsx
Adrian Miesikowski 3ea0779852 first commit
2026-02-10 13:34:41 +01:00

42 lines
954 B
TypeScript

"use client";
import { useEffect, useRef, useState } from "react";
export default function ScrollReveal({
children,
delay = 0,
}: {
children: React.ReactNode;
delay?: number;
}) {
const ref = useRef<HTMLDivElement>(null);
const [visible, setVisible] = useState(false);
useEffect(() => {
const el = ref.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
const timer = setTimeout(() => setVisible(true), delay);
observer.unobserve(el);
return () => clearTimeout(timer);
}
},
{ threshold: 0.12 }
);
observer.observe(el);
return () => observer.disconnect();
}, [delay]);
return (
<div
ref={ref}
className={`transition-all duration-700 ease-out ${
visible ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"
}`}
>
{children}
</div>
);
}