Change fixed navigation text color when over certain divs

Ok, I had to change a bit your code because you were checking on ids (you shouldn’t have multiple elements with the same ID),

This should be ok for your case, so basically i create an array of light-sections and then check if scroll position is inside one of them

var $ = jQuery;
$(document).ready(function () {
  var lightPos = [];
  $(".light-background").each(function () {
    lightPos.push({
      start: $(this).offset().top,
      end: $(this).offset().top + $(this).height()
    });
  });
  $(window).scroll(function () {
    var menuPos = $(".menu-btn").offset().top;
    var isInLight = !!lightPos.some((light) => {
      return light.start < menuPos && light.end > menuPos;
    });

    if (isInLight) {
      $(".menu-btn").addClass("dark-color");
      $(".menu-btn").removeClass("light-color");
    } else {
      $(".menu-btn").removeClass("dark-color");
      $(".menu-btn").addClass("light-color");
    }
  });
});
body {
  margin: 0;
  font-family: "Poppins", sans-serif;
}
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}
header {
  display: flex;
}
.container {
  text-align: center;
}

/*-------------------- COLORS */
.dark-background {
  background: #313747;
}
.light-background {
  background: #f4f4f4;
}
.dark-color {
  color: #303030;
}
.light-color {
  color: #f4f4f4;
}

/*-------------------- NAVIGATION */
nav {
  position: fixed;
  height: auto;
  width: 100%;
  margin: auto;
  z-index: 10;
}
.menu {
  display: flex;
  padding: 2em 0 2em 3em;
  text-align: left;
  float: left;
}
.menu li a {
  margin-right: 2em;
  font-size: 1.2em;
  font-weight: 700;
  text-decoration: none;
}

/*-------------------- HERO CONTAINER */
.hero-container {
  position: relative;
  height: 100vh;
  width: 100%;
}

/*-------------------- CONTENT CONTAINER */
.content-container {
  position: relative;
  display: flex;
  width: 100%;
  height: 100vh;
  margin: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
      <header>
        <nav>
          <ul class="menu">
            <li><a href="#" class="menu-btn light-color">Page 1</a></li>
            <li><a href="#" class="menu-btn light-color">Page 2</a></li>
            <li><a href="#" class="menu-btn light-color">Page 3</a></li>
          </ul>
        </nav>
      </header>

      <div class="hero-container dark-background"></div>

      <div class="content-container light-background"></div>

      <div class="content-container dark-background"></div>

      <div class="content-container light-background"></div>

      <div class="content-container dark-background"></div>

      <div class="content-container light-background"></div>

      <div class="content-container dark-background"></div>
    </div>

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top