2023-07-30 18:50:14 +02:00
|
|
|
'use client'
|
|
|
|
|
2021-04-18 01:56:23 +02:00
|
|
|
import { useEffect, useRef } from 'react'
|
|
|
|
|
2023-04-02 22:44:09 +02:00
|
|
|
export const RevealFade: React.FC<React.PropsWithChildren> = (props) => {
|
2021-04-18 01:56:23 +02:00
|
|
|
const { children } = props
|
|
|
|
|
|
|
|
const htmlElement = useRef<HTMLDivElement>(null)
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
const observer = new window.IntersectionObserver(
|
|
|
|
(entries, observer) => {
|
2023-07-19 00:09:28 +02:00
|
|
|
for (const entry of entries) {
|
2021-04-18 01:56:23 +02:00
|
|
|
if (entry.isIntersecting) {
|
2021-12-04 15:52:51 +01:00
|
|
|
entry.target.className =
|
|
|
|
'opacity-100 visible translate-y-0 transition-all duration-700 ease-in-out'
|
2021-04-18 01:56:23 +02:00
|
|
|
observer.unobserve(entry.target)
|
|
|
|
}
|
2023-07-19 00:09:28 +02:00
|
|
|
}
|
2021-04-18 01:56:23 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
root: null,
|
|
|
|
rootMargin: '0px',
|
|
|
|
threshold: 0.28
|
|
|
|
}
|
|
|
|
)
|
|
|
|
observer.observe(htmlElement.current as HTMLDivElement)
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
return (
|
2021-12-04 15:52:51 +01:00
|
|
|
<div ref={htmlElement} className='invisible -translate-y-7 opacity-0'>
|
|
|
|
{children}
|
|
|
|
</div>
|
2021-04-18 01:56:23 +02:00
|
|
|
)
|
|
|
|
}
|