From c1db1121ca5d981b6520a7cc268b9f1758dc88fe Mon Sep 17 00:00:00 2001 From: Aditya Mishra Date: Fri, 31 Oct 2025 12:45:08 +0530 Subject: [PATCH] Refactor Navbar: performance, accessibility & routing improvements in Hacktoberfest --- src/Components/Navbar.js | 120 +++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 49 deletions(-) diff --git a/src/Components/Navbar.js b/src/Components/Navbar.js index 6a6c5ea..ae9212c 100644 --- a/src/Components/Navbar.js +++ b/src/Components/Navbar.js @@ -1,29 +1,31 @@ -import React, { useEffect, useState } from "react"; -import { useLocation } from "react-router-dom"; +import React, { useEffect, useState, useRef } from "react"; +import { NavLink, useLocation } from "react-router-dom"; import Modal from "../Helper/Modal"; function Navbar() { - const [prevScrollPos, setPrevScrollPos] = useState(window.scrollY); const [hidden, setHidden] = useState(false); const [isScrolled, setIsScrolled] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); const location = useLocation(); + const prevScrollPosRef = useRef(window.scrollY); + /*Handle Scroll Hide/Show Navbar */ useEffect(() => { const handleScroll = () => { const currentScrollPos = window.scrollY; - const isHidden = prevScrollPos < currentScrollPos; + const isHidden = prevScrollPosRef.current < currentScrollPos; setHidden(isHidden); - setPrevScrollPos(currentScrollPos); + prevScrollPosRef.current = currentScrollPos; setIsScrolled(window.scrollY > 0); }; window.addEventListener("scroll", handleScroll); return () => window.removeEventListener("scroll", handleScroll); - }, [prevScrollPos]); + }, []); + /* Smooth Scroll to Anchors */ useEffect(() => { if (location.hash) { const sectionId = location.hash.replace("#", ""); @@ -32,13 +34,23 @@ function Navbar() { } }, [location]); - const toggleMenu = () => setIsMenuOpen(!isMenuOpen); - const toggleModal = () => setIsModalOpen(!isModalOpen); - - const isHomeOpen = location.pathname === "/"; - const isServicesOpen = location.pathname === "/services"; - const isBlogsOpen = location.pathname === "/blogs"; - const isImgsOpen = location.pathname === "/photos"; + /* Lock Scroll When Menu Is Open */ + useEffect(() => { + document.body.style.overflow = isMenuOpen ? "hidden" : "auto"; + }, [isMenuOpen]); + + const toggleMenu = () => setIsMenuOpen((prev) => !prev); + const toggleModal = () => setIsModalOpen((prev) => !prev); + + const navItems = [ + { to: "/", label: "Home" }, + { to: "/#spaces", label: "Spaces" }, + { to: "/#about", label: "About Us" }, + { to: "/services", label: "Our Services" }, + { to: "/blogs", label: "Our Blogs" }, + { to: "/photos", label: "Images" }, + { to: "/Contact", label: "Contact" }, + ]; return ( <> @@ -48,6 +60,7 @@ function Navbar() { }`} data-header > + {/* Top Info Bar */}

Makhija Arcade, 35th Rd, Khar, Khar West, Mumbai, Maharashtra 400052 @@ -65,75 +78,78 @@ function Navbar() {

+ {/*Main Navbar */}
+ Grilli - Home -