单击导航 link 时关闭导航菜单覆盖。只有第一个导航 link 有效
Close nav menu overlay when clicking nav link. Only the first nav link works
我知道以前有人问过这个问题,但这个问题有点曲折。
我看到一些人对这个问题投了反对票。请让我知道您反对投票的原因,以便我将来能够更正此问题。感谢大家的参与。
我有一个单页滚动网站,其导航菜单覆盖在小于 992 像素的屏幕上。菜单切换正常,但是当单击导航 link 时,导航菜单保持打开状态,第一个导航除外 - link.
我喜欢每次 link 单击时关闭导航菜单。
那么如何让所有的导航 link 在点击时关闭导航菜单?我有一种预感,它与使用 querySelectorAll
而不是 querySelector
.
有关
这里是 link 网站:https://portfolioprime.github.io/robotics/
如有任何帮助,我们将不胜感激。
这是导航html。
HTML
<body>
<header>
<nav class="nav">
<!-- Nav Menu -->
<ul class="nav-list">
<li class="nav-item">
<a href="#showcase" class="nav-link">Home</a></li>
<li class="nav-item">
<a href="#robots" class="nav-link">Robots</a></li>
<li class="nav-item">
<a href="#projects" class="nav-link">Projects</a></li>
<li class="nav-item">
<a href="#research" class="nav-link">Research</a></li>
<li class="nav-item">
<a href="#explore" class="nav-link">Explore</a></li>
<li class="nav-item">
<a href="#prosthetics" class="nav-link">Prosthetics</a></li>
<li class="nav-item">
<a href="#contact" class="nav-link">Contact</a></li>
</ul>
<!-- Menu-toggle -->
<div class="menu-toggle">
<i class="fas fa-bars"></i>
<i class="fas fa-times"></i>
</div>
</nav>
</header>
</body>
这是 Javascript。
JS
// Select element function
const selectElement = function (element) {
return document.querySelector(element);
};
let menuToggler = selectElement('.menu-toggle');
let body = selectElement('body');
let menuClose = selectElement('.nav-link');
// Open/Close menu on .menu-toggle click
menuToggler.addEventListener('click', function () {
body.classList.toggle('open');
});
// Close menu on .nav-link click
menuClose.addEventListener('click', function () {
body.classList.remove('open');
});
您可能对 .open
class 的 CSS 感兴趣,它附加到正文 javascript。
CSS
.open .nav-list {
bottom: 0;
}
.nav-link:hover {
border-bottom: none;
}
.menu-toggle {
display: block;
}
.open .menu-toggle .fa-bars {
display: none;
}
.open .menu-toggle .fa-times {
display: block;
position: fixed;
right: 2.7rem;
top: 2rem;
}
你的预感完全正确。这样做。
// Select element function
const selectElement = (element) =>
document.querySelector(element);
const getAllWithClass = (className) =>
document.getElementsByClassName(className);
const
body = selectElement('body'),
// Converts the returned collection to a proper Array
navLinks = Array.from(getAllWithClass("nav-link"));
// Close menu on .nav-link click
navLinks.forEach(link => { // The Array method `forEach` loops through
link.addEventListener('click', function() {
body.classList.remove('open');
console.log("(No more blue background means it's closed)");
});
});
.open .nav-list {
background-color: lightskyblue;
}
<body class="open">
<ul class="nav-list">
<li class="nav-item">
<a href="#showcase" class="nav-link">Home</a></li>
<li class="nav-item">
<a href="#robots" class="nav-link">Robots</a></li>
<li class="nav-item">
<a href="#projects" class="nav-link">Projects</a></li>
</ul>
</body>
注意:我认为最好在整个菜单上添加一个单击侦听器(并在继续之前检查任何单击事件的目标是否为 nav-link)。但由于您想了解如何一次添加多个侦听器,所以我坚持这样做。
我知道以前有人问过这个问题,但这个问题有点曲折。
我看到一些人对这个问题投了反对票。请让我知道您反对投票的原因,以便我将来能够更正此问题。感谢大家的参与。
我有一个单页滚动网站,其导航菜单覆盖在小于 992 像素的屏幕上。菜单切换正常,但是当单击导航 link 时,导航菜单保持打开状态,第一个导航除外 - link.
我喜欢每次 link 单击时关闭导航菜单。
那么如何让所有的导航 link 在点击时关闭导航菜单?我有一种预感,它与使用 querySelectorAll
而不是 querySelector
.
这里是 link 网站:https://portfolioprime.github.io/robotics/
如有任何帮助,我们将不胜感激。
这是导航html。
HTML
<body>
<header>
<nav class="nav">
<!-- Nav Menu -->
<ul class="nav-list">
<li class="nav-item">
<a href="#showcase" class="nav-link">Home</a></li>
<li class="nav-item">
<a href="#robots" class="nav-link">Robots</a></li>
<li class="nav-item">
<a href="#projects" class="nav-link">Projects</a></li>
<li class="nav-item">
<a href="#research" class="nav-link">Research</a></li>
<li class="nav-item">
<a href="#explore" class="nav-link">Explore</a></li>
<li class="nav-item">
<a href="#prosthetics" class="nav-link">Prosthetics</a></li>
<li class="nav-item">
<a href="#contact" class="nav-link">Contact</a></li>
</ul>
<!-- Menu-toggle -->
<div class="menu-toggle">
<i class="fas fa-bars"></i>
<i class="fas fa-times"></i>
</div>
</nav>
</header>
</body>
这是 Javascript。
JS
// Select element function
const selectElement = function (element) {
return document.querySelector(element);
};
let menuToggler = selectElement('.menu-toggle');
let body = selectElement('body');
let menuClose = selectElement('.nav-link');
// Open/Close menu on .menu-toggle click
menuToggler.addEventListener('click', function () {
body.classList.toggle('open');
});
// Close menu on .nav-link click
menuClose.addEventListener('click', function () {
body.classList.remove('open');
});
您可能对 .open
class 的 CSS 感兴趣,它附加到正文 javascript。
CSS
.open .nav-list {
bottom: 0;
}
.nav-link:hover {
border-bottom: none;
}
.menu-toggle {
display: block;
}
.open .menu-toggle .fa-bars {
display: none;
}
.open .menu-toggle .fa-times {
display: block;
position: fixed;
right: 2.7rem;
top: 2rem;
}
你的预感完全正确。这样做。
// Select element function
const selectElement = (element) =>
document.querySelector(element);
const getAllWithClass = (className) =>
document.getElementsByClassName(className);
const
body = selectElement('body'),
// Converts the returned collection to a proper Array
navLinks = Array.from(getAllWithClass("nav-link"));
// Close menu on .nav-link click
navLinks.forEach(link => { // The Array method `forEach` loops through
link.addEventListener('click', function() {
body.classList.remove('open');
console.log("(No more blue background means it's closed)");
});
});
.open .nav-list {
background-color: lightskyblue;
}
<body class="open">
<ul class="nav-list">
<li class="nav-item">
<a href="#showcase" class="nav-link">Home</a></li>
<li class="nav-item">
<a href="#robots" class="nav-link">Robots</a></li>
<li class="nav-item">
<a href="#projects" class="nav-link">Projects</a></li>
</ul>
</body>
注意:我认为最好在整个菜单上添加一个单击侦听器(并在继续之前检查任何单击事件的目标是否为 nav-link)。但由于您想了解如何一次添加多个侦听器,所以我坚持这样做。