Skip to content

Commit

Permalink
Issue #3 has been fixed: Make the nav bar transition smooth and intui…
Browse files Browse the repository at this point in the history
…tive
  • Loading branch information
genial-mani committed Oct 2, 2024
1 parent 9bc3485 commit daf9f29
Showing 1 changed file with 44 additions and 36 deletions.
80 changes: 44 additions & 36 deletions src/app/page.js
Original file line number Diff line number Diff line change
@@ -1,75 +1,83 @@
"use client";

import { useEffect } from "react";
import { useEffect, useState } from "react";
import Image from "next/image";
const hideNavbar = () => {
if (typeof window !== "undefined") {
const navbar = document.querySelector("nav");
if (navbar) navbar.style.display = "none";
}
};
const showNavbar = () => {
if (typeof window !== "undefined") {
const navbar = document.querySelector("nav");
if (navbar) {
navbar.style.display = "flex";
}
}
};

export default function Home() {
const [visible, setVisible] = useState(false);
const [scrollPosition, setScrollPosition] = useState(0);


// This UseEffect is used to handle scrolling
useEffect(() => {
hideNavbar();
const handleScroll = () => {
const currentScrollPos = window.scrollY;

if (currentScrollPos > scrollPosition) {
setVisible(false); //scrolling down
} else {
setVisible(true); //scrolling up
}

setScrollPosition(currentScrollPos);
};

window.addEventListener("scroll", handleScroll);

return () => {
const navbar = document.querySelector("nav");
if (navbar) navbar.style.display = "flex";
window.removeEventListener("scroll", handleScroll);
};
}, []);
}, [scrollPosition]);

// Function to scroll to the section
const scrollToSection = () => {
const section = document.getElementById("more-section");
if (section) {
section.scrollIntoView({ behavior: "smooth" }); // Smooth scrolling
showNavbar();
section.scrollIntoView({ behavior: "smooth" });
setTimeout(() => { // this method is used to move down the nav when clicked on button.
window.scrollBy({
top: -1,
behavior: "smooth"
});
}, 600);
}
};

return (
<>
<nav class="fixed w-full z-20 top-0 start-0 ">
<div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
<nav className={`fixed w-full z-20 top-0 start-0 transition-all duration-300 ease-in-out ${visible ? "transform translate-y-0" : "transform -translate-y-full"}`}>
<div className="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
<a
href="https://flowbite.com/"
class="flex items-center space-x-3 rtl:space-x-reverse"
className="flex items-center space-x-3 rtl:space-x-reverse"
>
<Image
src="https://flowbite.com/docs/images/logo.svg"
alt="Flowbite Logo"
width={32}
height={32}
/>
<span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">
<span className="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">
Flowbite
</span>
</a>
<div class="flex md:order-2 space-x-3 md:space-x-0 rtl:space-x-reverse">
<div className="flex md:order-2 space-x-3 md:space-x-0 rtl:space-x-reverse">
<button
type="button"
class="text-white hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-blue-600 dark:hover: dark:focus:ring-blue-800"
className="text-white hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-blue-600 dark:hover: dark:focus:ring-blue-800"
>
Get started
</button>
<button
data-collapse-toggle="navbar-sticky"
type="button"
class="inline-flex items-center p-2 w-10 h-10 justify-center text-sm text-gray-500 rounded-lg md:hidden hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"
className="inline-flex items-center p-2 w-10 h-10 justify-center text-sm text-gray-500 rounded-lg md:hidden hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"
aria-controls="navbar-sticky"
aria-expanded="false"
>
<span class="sr-only">Open main menu</span>
<span className="sr-only">Open main menu</span>
<svg
class="w-5 h-5"
className="w-5 h-5"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="none"
Expand All @@ -86,14 +94,14 @@ export default function Home() {
</button>
</div>
<div
class="items-center justify-between hidden w-full md:flex md:w-auto md:order-1"
className="items-center justify-between hidden w-full md:flex md:w-auto md:order-1"
id="navbar-sticky"
>
<ul class="flex flex-col p-4 md:p-0 mt-4 font-medium md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 ">
<ul className="flex flex-col p-4 md:p-0 mt-4 font-medium md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 ">
<li>
<a
href="#"
class="block py-2 px-3 text-white rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500"
className="block py-2 px-3 text-white rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500"
aria-current="page"
>
Home
Expand All @@ -102,23 +110,23 @@ export default function Home() {
<li>
<a
href="#"
class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
className="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
>
About
</a>
</li>
<li>
<a
href="#"
class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
className="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
>
Services
</a>
</li>
<li>
<a
href="#"
class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
className="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
>
Contact
</a>
Expand Down

0 comments on commit daf9f29

Please sign in to comment.