[使用id滚动页面时如何更改菜单的活动类别

问题描述 投票:0回答:1

我已经完成了具有视差样式的自定义菜单。菜单固定在顶部,并且我想在页面滚动时更改菜单的活动类。我已经通过单击功能完成了操作,因此通过单击菜单,活动类将更改为该特定菜单。我创建了此菜单,其ID不是'href =“#home”'。我发现的大多数代码都是由href =“#”和nav完成的。我不希望菜单与nav navbar成为一体。那么可以通过id完成吗?

我的代码在下面

  $("#home-btn").on('click',function() {
		$('html, body').animate({
			scrollTop : $("#home").offset().top - 10
		}, 1000);
		$('.main-menu ul li').removeClass('active');
		$('#home-btn').parent().addClass('active');
	});
	
	$("#service-btn").on('click',function() {
		$('html, body').animate({
			scrollTop : $("#service").offset().top - 45
		}, 1000);
		$('.main-menu ul li').removeClass('active');
		$('#service-btn').parent().addClass('active');
	});
	
	$("#about-btn").on('click',function() {
		$('html, body').animate({
			scrollTop : $("#about").offset().top - 120
		}, 1000);
		$('.main-menu ul li').removeClass('active');
		$('#about-btn').parent().addClass('active');
	});
	
	$("#contact-btn").on('click',function() {
		$('html, body').animate({
			scrollTop : $("#contact").offset().top - 120
		}, 2000);
		$('.main-menu ul li').removeClass('active');
		$('#contact-btn').parent().addClass('active');
	});
.top-adj {
  margin-top: 130px;
}

.main-menu {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: #f1f1f1;
}

.main-menu ul {
	display: flex;
	align-items: center;
	justify-content: space-between;
}

.main-menu ul li {
	display: block;
	font-weight: 600;
	margin-left: 25px;
}

.main-menu ul li:first-child {
	margin-left: 0px;
}

.main-menu ul li a {
	color: #000;
	display: block;
	cursor: pointer;
	padding: 25px 10px;
	position: relative;
	border-bottom: 4px solid;
	border-color: transparent;
}

.main-menu ul li a:hover {
	text-decoration: none;
}

.main-menu ul li.active a {
	padding: 25px 10px;
	border-bottom: 4px solid #104377;
}

.section {
  width: 100%;
  height: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 <div class="main-menu">
   <ul>
       <li class="active"><a id="home-btn">Home</a></li>
         <li><a id="service-btn">Services</a></li>
         <li><a id="about-btn">About</a></li>
         <li><a id="contact-btn">Contact</a></li>
    </ul>
 </div>

<div class="top-adj"></div>
<div class="section" id="home">Home</div>
<div class="section" id="service">Service</div>
<div class="section" id="about">About</div>
<div class="section" id="contact">Contact</div>
jquery html css parallax
1个回答
0
投票

(function() {
  var section = document.querySelectorAll(".section");
  var sections = {};
  var i = 0;

  Array.prototype.forEach.call(section, function(e) {
    sections[e.id] = e.offsetTop;
  });

  window.onscroll = function() {
    var scrollPosition = document.documentElement.scrollTop || document.body.scrollTop;

    for (i in sections) {
      if (sections[i] <= scrollPosition) {
        document.querySelector('.active').setAttribute('class', ' ');
        document.querySelector('a[href*=' + i + ']').parentElement.setAttribute('class', 'active');
      }
    }
  };
})();
.top-adj {
  margin-top: 130px;
}

.main-menu {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: #f1f1f1;
}

.main-menu ul {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.main-menu ul li {
  display: block;
  font-weight: 600;
  margin-left: 25px;
}

.main-menu ul li:first-child {
  margin-left: 0px;
}

.main-menu ul li a {
  color: #000;
  display: block;
  cursor: pointer;
  padding: 25px 10px;
  position: relative;
  border-bottom: 4px solid;
  border-color: transparent;
  text-decoration: none;
}

.main-menu ul li a:hover {
  text-decoration: none;
}

.main-menu ul li.active a {
  padding: 25px 10px;
  border-bottom: 4px solid #104377;
}

.section {
  width: 100%;
  height: 100vh;
}
<div class="main-menu">
   <ul>
     <li class="active"><a id="home-btn" href="#home">Home</a></li>
     <li><a id="service-btn" href="#service">Services</a></li>
     <li><a id="about-btn" href="#about">About</a></li>
     <li><a id="contact-btn" href="#contact">Contact</a></li>
    </ul>
 </div>

<div class="top-adj"></div>
<div class="section" id="home">Home</div>
<div class="section" id="service">Service</div>
<div class="section" id="about">About</div>
<div class="section" id="contact">Contact</div>

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.