import React, { useState, useRef, useEffect, useCallback } from "react"; import "./MeteorRegion.css"; const MeteorRegion = ({ children, className = "", maxHeight }) => { const [scrollProgress, setScrollProgress] = useState(0); const [isVisible, setIsVisible] = useState(false); const containerRef = useRef(null); const updateScroll = useCallback(() => { const el = containerRef.current; if (!el) return; const { scrollTop, scrollHeight, clientHeight } = el; const progress = scrollTop / (scrollHeight - clientHeight); setScrollProgress(isNaN(progress) ? 0 : progress); setIsVisible(scrollHeight > clientHeight); }, []); useEffect(() => { const el = containerRef.current; if (!el) return; const resizeObserver = new ResizeObserver(updateScroll); resizeObserver.observe(el); el.addEventListener("scroll", updateScroll); updateScroll(); return () => { resizeObserver.disconnect(); el.removeEventListener("scroll", updateScroll); }; }, [updateScroll]); return (
{children}
{isVisible && (
)}
); }; export default MeteorRegion;