UNPKG

jabb-astro-components

Version:
66 lines (56 loc) 2.05 kB
import { useState, useEffect } from "react"; function useTransitionSides( ref: React.RefObject<HTMLElement | null>, rev: boolean ) { const [isVisible, setIsVisible] = useState(false); const [hasTransitioned, setHasTransitioned] = useState(false); useEffect(() => { if (!hasTransitioned && ref.current) { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setIsVisible(true); setHasTransitioned(true); observer.disconnect(); } }); observer.observe(ref.current); return () => observer.disconnect(); } }, [ref, rev, hasTransitioned]); const transitionClasses = `relative transition-all duration-700 ${ isVisible ? rev ? "left-[0%]" : "right-[0%]" : rev ? "left-[-50%]" : "right-[-50%]" } opacity-${isVisible ? 100 : 0}`; return transitionClasses; } function useTransitionUp(ref: React.RefObject<HTMLElement | null>) { const [isVisible, setIsVisible] = useState(false); const [hasTransitioned, setHasTransitioned] = useState(false); useEffect(() => { if (!hasTransitioned && ref.current) { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setIsVisible(true); setHasTransitioned(true); observer.disconnect(); } }); observer.observe(ref.current); return () => observer.disconnect(); } }, [ref, hasTransitioned]); const transitionClasses = `relative transition-all duration-700 ${ isVisible ? "mt-0" : "mt-10" } opacity-${isVisible ? 100 : 0}`; return transitionClasses; } export default { useTransitionSides, useTransitionUp, };