DEV Community

Cover image for Building a Scrollable Navbar with React: A Step-by-Step Guide
ryad
ryad

Posted on

Building a Scrollable Navbar with React: A Step-by-Step Guide

Are you looking to create an engaging and interactive website with a dynamic scrolling navbar? You’ve come to the right place. In this tutorial, we’ll walk you through the process of creating a scrollable navbar in React that hides when the user scrolls down and reappears when they scroll up. This effect is a common feature on modern websites and can greatly enhance the user experience. Let’s get started!

Prerequisites

Before we dive into the code, make sure you have the following:

  • Node.js and npm installed on your computer.
  • Basic knowledge of React.js.
  • A text editor or integrated development environment (IDE) of your choice.

Setting Up the Project

First, create a new React project using create-react-app or your preferred method. Once your project is set up, you can create a new component for the scrollable navbar. For this tutorial, we'll call it ScrollNavbar.js.


import React, { useState, useEffect } from 'react';
const ScrollNavbar = () => {
  // State variables to manage scroll behavior
  const [prevScrollpos, setPrevScrollpos] = useState(window.pageYOffset);
  const [top, setTop] = useState(0);
  useEffect(() => {
    // Function to handle scroll events
    const handleScroll = () => {
      const currentScrollPos = window.pageYOffset;
      if (prevScrollpos > currentScrollPos) {
        setTop(0); // Show navbar
      } else {
        setTop(-50); // Hide navbar
      }
      setPrevScrollpos(currentScrollPos);
    };
    // Add scroll event listener when the component mounts
    window.addEventListener('scroll', handleScroll);
    // Clean up by removing the event listener when the component unmounts
    return () => {
      window.removeEventListener('scroll', handleScroll);
    };
  }, [prevScrollpos]);
  // Styles for the navbar and links
  const navbarStyle = {
    backgroundColor: '#333',
    position: 'fixed',
    top: `${top}px`,
    width: '100%',
    display: 'block',
    transition: 'top 0.3s',
  };
  const linkStyle = {
    float: 'left',
    display: 'block',
    color: '#f2f2f2',
    textAlign: 'center',
    padding: '15px',
    textDecoration: 'none',
    fontSize: '17px',
  };
  return (
    <div>
      <div id="navbar" style={navbarStyle}>
        <a href="#home" style={linkStyle}>
          Home
        </a>
        <a href="#news" style={linkStyle}>
          News
        </a>
        <a href="#contact" style={linkStyle}>
          Contact
        </a>
      </div>
      <div
        style={{
          padding: '15px 15px 2500px',
          fontSize: '30px',
          marginTop: '30px',
        }}
      >
        <p>
          <b>This example demonstrates how to hide a navbar when the user starts to scroll the page.</b>
        </p>
        {/* ... Rest of your content ... */}
      </div>
    </div>
  );
};
export default ScrollNavbar;
Enter fullscreen mode Exit fullscreen mode

How It Works

In this code, we start by defining two state variables, prevScrollpos and top, which will help us manage the scroll behavior of the navbar. The useEffect hook is used to add an event listener to the window object to detect scroll events. When the user scrolls down, the top value is set to -50px, causing the navbar to hide. Conversely, when the user scrolls up, the top value is set to 0, making the navbar visible again.

Styling Your Navbar

You can customize the appearance of the navbar and links by modifying the navbarStyle and linkStyle objects. Adjust the colors, fonts, and other CSS properties to match your website's design.

Integrating the ScrollNavbar Component

Now that you have created the ScrollNavbar component, you can easily integrate it into your application by importing it and rendering it where you want the scrollable navbar to appear.


import React from 'react';
import ScrollNavbar from './ScrollNavbar';
function App() {
  return (
    <div>
      <ScrollNavbar />
      {/* Your content goes here */}
    </div>
  );
}
export default App;
Enter fullscreen mode Exit fullscreen mode

Conclusion

Congratulations! You’ve successfully built a scrollable navbar in React that hides when the user scrolls down and reappears when they scroll up. This dynamic effect can greatly enhance the user experience of your website. Feel free to further customize the styles and integrate this component into your web project. Happy coding!

Now, go ahead and test your scrollable navbar in your React application. Enjoy the improved user experience it brings to your website!

Top comments (1)

Collapse
 
goozhi profile image
wrvr

Great!