javascript - 更改导航栏上的“当前”类
问题描述
顺便说一句,第一篇文章。
所以我正在创建一个投资组合页面。它现在只有一个页面,向下滚动时有多个部分。我有一个可以切换的导航栏,当您单击其中一个“部分”时,您会向下滚动到它。
但是,当有人按下“项目”链接时,我可以使用什么 javascript 代码来制作它,以便当页面到达该部分时,它会更改导航栏中的颜色样式?我有一个名为 current 的样式类,它具有我想要在该部分处于焦点或单击时应用的样式。
我希望这个问题是可以理解的。先感谢您。(PS我是初学者)
编辑
这是我用于导航栏的 HTML 代码,也是打开和关闭它的 Javascript,当它在页面的某个部分更改类时,我不确定下一步该去哪里。
HTML导航代码:
<header>
<div class="menu-btn noSelect">
<div class="btn-line"></div>
<div class="btn-line"></div>
<div class="btn-line"></div>
</div>
<nav class="menu noSelect">
<div class="menu-branding"></div>
<ul class="menu-nav">
<li class="nav-item current">
<a href="#home" class="nav-link">Home</a>
</li>
<li class="nav-item">
<a href="#work" class="nav-link">My Work</a>
</li>
<li class="nav-item">
<a href="#about" class="nav-link">About Me</a>
</li>
<li class="nav-item">
<a href="#contact" class="nav-link">Contact</a>
</li>
</ul>
</nav>
</header>
JavaScript:
// Select DOM Items
const menuBtn = document.querySelector(".menu-btn");
const menu = document.querySelector(".menu");
const menuNav = document.querySelector(".menu-nav");
const menuBranding = document.querySelector(".menu-branding");
const navItem = document.querySelectorAll(".nav-item");
// Set Initial state of the menu
let showMenu = false;
menuBtn.addEventListener("click", toggleMenu);
function toggleMenu() {
// Opens the navigation bar
if (!showMenu) {
menuBtn.classList.add("close");
menu.classList.add("show");
menuNav.classList.add("show");
menuBranding.classList.add("show");
navItem.forEach(item => item.classList.add("show"));
// Set Menu state to true
showMenu = true;
}
// Closes the navigation bar
else {
menuBtn.classList.remove("close");
menu.classList.remove("show");
menuNav.classList.remove("show");
menuBranding.classList.remove("show");
navItem.forEach(item => item.classList.remove("show"));
// Set Menu state to false
showMenu = false;
}
}
亲切的问候,塔拉尔德
解决方案
这不是太棘手,我很确定这是一个在某些时候被问过并回答过的问题,但让我试着为你指出正确的方向。
您没有提供任何代码,但我假设您有一个非常标准的导航栏,它可能是 aul
并且它包含一些将成为li
元素的项目。它可能看起来像这样:
<ul class="navigation">
<li class="navigation__item">Nav item</li>
<li class="navigation__item">Nav item</li>
<li class="navigation__item">Nav item</li>
<li class="navigation__item">Nav item</li>
</ul>
并且,假设您在其上添加了一些快速和基本的样式,以便它水平输出项目,在悬停时显示指针图标,并具有悬停状态,以便单个导航项目在悬停时更改背景颜色。你还提到你已经current
准备好上课了,所以我也把它扔进去了:
.navigation {
background: #ccc;
}
.navigation__item {
display: inline-block;
padding: 1em;
cursor: pointer;
}
.navigation__item:hover {
background: #ddd;
}
.navigation__item.current {
background: #eee;
}
您似乎在询问如何使用 JS 在单击导航项时将“当前”类应用于导航项。我会设置事件侦听器来监视项目,然后当单击一个时触发一些应用current
该类的脚本,并current
从其他项目中删除任何现有的类。这可能看起来有点像这样:
const navItems = document.querySelectorAll('.navigation__item');
for (let i = 0; i < navItems.length; i++) {
navItems[i].addEventListener("click", function() {
Array.from(navItems, navItem => navItem.classList.remove('current'));
navItems[i].classList.add('current');
});
}
如果它使生活更轻松,您可以看到所有这些协同工作。希望这应该有助于实现您自己的版本。
推荐阅读
- django - Django 2.1.2 - AttributeError:'UserProfile'对象没有属性'object'
- okta - 为 jupyterhub 设置 Okta 身份验证
- vb.net - 将绑定源转换为 DataTable
- regex - 正则表达式 - 在 IntelliJ IDEA'a 中查找不以特定前缀开头的匹配词在路径中查找
- php - 在 MS SQL Server 查询中使用 HTML 输入
- discord.js - 设置音乐队列的最大大小
- kubernetes - Kubernetes RBAC cluster-admin 没有秘密读取权限
- javascript - ReactJS 为不同的页面渲染 html
- algorithm - 如何从标题重建霍夫曼树?
- html - 在特定页面上更改导航栏品牌颜色