diff --git a/src/Components/Navbar/Navbar.tsx b/src/Components/Navbar/Navbar.tsx index c77d6a8..60d1506 100644 --- a/src/Components/Navbar/Navbar.tsx +++ b/src/Components/Navbar/Navbar.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, } from "react"; +import { useCallback, useEffect, useRef, useState, } from "react"; import { useAppDispatch, useAppSelector, useCurrentSection, useMediaQuery, useResizeListener } from "src/utils/hooks"; import { setNavHeight } from "src/redux/features/ui.slice"; import NavDesktop from "./NavDesktop"; @@ -7,6 +7,8 @@ import { FiArrowRight } from "react-icons/fi"; import { BiRocket } from "react-icons/bi"; import { Link } from "react-router-dom"; import { PAGES_ROUTES } from "src/utils/routing"; +import { motion } from "framer-motion"; +import throttle from "lodash.throttle"; export const navLinks = []; @@ -16,9 +18,13 @@ export default function Navbar() { const dispatch = useAppDispatch(); const theme = useAppSelector(state => state.ui.theme) - const isLargeScreen = useMediaQuery(MEDIA_QUERIES.isLarge) + const [navTransparent, setNavTransparent] = useState(true); + const isNavTransparentRef = useRef(true); + + isNavTransparentRef.current = navTransparent; + const updateNavHeight = useCallback(() => { const nav = document.querySelector("nav"); if (nav) { @@ -28,11 +34,26 @@ export default function Navbar() { document.documentElement.style.setProperty('--navHeight', nav.clientHeight + 'px') } } - }, [dispatch]) + }, [dispatch]); + + const handleScroll = useCallback(() => { + const inTop = window.scrollY < 10; + if (inTop && !isNavTransparentRef.current) setNavTransparent(true); + if (!inTop && isNavTransparentRef.current) setNavTransparent(false); + }, []) useEffect(() => { updateNavHeight(); - }, [updateNavHeight]); + handleScroll(); + + const throttledScrollHandler = throttle(handleScroll, 500) + + document.addEventListener('scroll', throttledScrollHandler) + + return () => { + document.removeEventListener('scroll', throttledScrollHandler); + } + }, [handleScroll, updateNavHeight]); useResizeListener(updateNavHeight) @@ -52,13 +73,19 @@ export default function Navbar() { + const bgColor = theme === 'dark' ? "rgba(16 24 40,1)" : "rgba(255 255 255,1)"; + const bgColorTrans = theme === 'dark' ? "rgba(16 24 40,0)" : "rgba(255 255 255,0)"; + return ( -
-
+ ); } + diff --git a/src/features/Projects/pages/ExplorePage/Header/Header.tsx b/src/features/Projects/pages/ExplorePage/Header/Header.tsx index 55fcd87..da80305 100644 --- a/src/features/Projects/pages/ExplorePage/Header/Header.tsx +++ b/src/features/Projects/pages/ExplorePage/Header/Header.tsx @@ -4,6 +4,7 @@ import ASSETS from 'src/assets' import Badge from 'src/Components/Badge/Badge' import { Category } from 'src/features/Projects/Components/Categories/Categories' import { useProjectsFilters } from '../filters-context' +import { useAppSelector } from 'src/utils/hooks' type Props = { selectedCategry: Category | null @@ -11,7 +12,7 @@ type Props = { export default function Header(props: Props) { - + const navHeight = useAppSelector(s => s.ui.navHeight) const { filters, filtersEmpty, removeFilter } = useProjectsFilters(); @@ -35,7 +36,10 @@ export default function Header(props: Props) { return ( -
+
+
@@ -43,7 +47,7 @@ export default function Header(props: Props) { className='text-primary-500 text-h1 font-medium' >{title} {subtitle && -

{subtitle}

+

{subtitle}

} {!filtersEmpty &&

filtered by