1
1
mirror of https://github.com/theoludwig/theoludwig.git synced 2025-05-29 22:37:44 +02:00
Files
.profile/packages/ui/src/design/Section/RevealFade.tsx
Théo LUDWIG 7bde328b96 perf!: monorepo setup + fully static + webp images
BREAKING CHANGE: minimum supported Node.js >= 22.0.0 and pnpm >= 9.5.0
2024-07-30 23:59:06 +02:00

40 lines
972 B
TypeScript

"use client"
import { useEffect, useRef } from "react"
export interface RevealFadeProps extends React.PropsWithChildren {}
export const RevealFade: React.FC<RevealFadeProps> = (props) => {
const { children } = props
const htmlElement = useRef<HTMLDivElement | null>(null)
const className =
"opacity-100 visible translate-y-0 transition-all duration-700 ease-in-out"
useEffect(() => {
const observer = new window.IntersectionObserver(
(entries, observer) => {
for (const entry of entries) {
if (entry.isIntersecting) {
entry.target.className = className
observer.unobserve(entry.target)
}
}
},
{
root: null,
rootMargin: "0px",
threshold: 0.28,
},
)
observer.observe(htmlElement.current as HTMLDivElement)
}, [])
return (
<div ref={htmlElement} className="invisible -translate-y-7 opacity-0">
{children}
</div>
)
}