单击 link 时关闭导航叠加层(一页)
Close nav overlay when link is clicked (one pager)
在我的网站的移动版本上,我有一个汉堡包图标,当使用 javascript 单击时,它会打开一个全屏覆盖。这些链接是锚链接,因为它是一个单页网站。单击其中一个链接时,当我希望覆盖层关闭时,覆盖层保持打开状态。
我认为我 运行 遇到的问题是因为我设置了 jQuery 代码,因此当单击其中一个链接时会出现平滑的滚动效果。这可以完美地工作,但是叠加层保持打开状态。
所以openNav/closeNav设置为javascript,滚动效果设置为jQuery。我很难弄清楚如何解决这个问题。
这是我的 HTML:
<div id="mobile-navbar">
<img class="open-nav" src="img/open-nav.png" onclick="openNav()">
<a href="#1"><img class="logo-mobile" src="img/logo-mobile.png" alt=""></a>
<div id="myNav" class="overlay">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<div class="overlay-content">
<a href="#1">ABOUT</a>
<a href="#2">RIDING AREAS</a>
<a href="#3">FACILITY</a>
<a href="#4">PRICING AND SERVICES</a>
<a href="#5">CONTACT</a>
</div>
</div>
</div>
这是 Javascript(用于 open/close 导航):
function menu(x) {
x.classList.toggle("change");
}
function openNav() {
document.getElementById("myNav").style.height = "100%";
}
function closeNav() {
document.getElementById("myNav").style.height = "0%";
}
这里是 jQuery(用于平滑滚动):
$(document).ready(function(){
$("a").on('click', function(event) {
if (this.hash !== "") {
event.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
}
});
});
您可以将 onclick="closeNav();"
添加到您的所有链接。
好的,所以我认为您最好选择使用完整的 js 或仅使用 Jquery。将两者结合起来不是一个好的做法,因为 jquery 它本身会占用大量开销,因此在某些可以使用 jquery 的地方使用纯 js 可能会被视为对另一半的不公正。
纯Jquery:
$(document).ready(function(){
let isOpen = false; //=========> use a flag to toggle navbar
function navToggle(){
//Click event for Nav
$("#myNav").on('click', function(event) {
if(!isOpen){
isOpen = !isOpen;
$(this).css("height", "100%");
}else{
isOpen = !isOpen;
$(this).css("height", "0%");
}
});
}
//Click event for Nav Links
$("a").on('click', function(event) {
//Call nav to toggle
isOpen = true;
navToggle();
if (this.hash !== "") {
event.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
}
});
});
在我的网站的移动版本上,我有一个汉堡包图标,当使用 javascript 单击时,它会打开一个全屏覆盖。这些链接是锚链接,因为它是一个单页网站。单击其中一个链接时,当我希望覆盖层关闭时,覆盖层保持打开状态。
我认为我 运行 遇到的问题是因为我设置了 jQuery 代码,因此当单击其中一个链接时会出现平滑的滚动效果。这可以完美地工作,但是叠加层保持打开状态。
所以openNav/closeNav设置为javascript,滚动效果设置为jQuery。我很难弄清楚如何解决这个问题。
这是我的 HTML:
<div id="mobile-navbar">
<img class="open-nav" src="img/open-nav.png" onclick="openNav()">
<a href="#1"><img class="logo-mobile" src="img/logo-mobile.png" alt=""></a>
<div id="myNav" class="overlay">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<div class="overlay-content">
<a href="#1">ABOUT</a>
<a href="#2">RIDING AREAS</a>
<a href="#3">FACILITY</a>
<a href="#4">PRICING AND SERVICES</a>
<a href="#5">CONTACT</a>
</div>
</div>
</div>
这是 Javascript(用于 open/close 导航):
function menu(x) {
x.classList.toggle("change");
}
function openNav() {
document.getElementById("myNav").style.height = "100%";
}
function closeNav() {
document.getElementById("myNav").style.height = "0%";
}
这里是 jQuery(用于平滑滚动):
$(document).ready(function(){
$("a").on('click', function(event) {
if (this.hash !== "") {
event.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
}
});
});
您可以将 onclick="closeNav();"
添加到您的所有链接。
好的,所以我认为您最好选择使用完整的 js 或仅使用 Jquery。将两者结合起来不是一个好的做法,因为 jquery 它本身会占用大量开销,因此在某些可以使用 jquery 的地方使用纯 js 可能会被视为对另一半的不公正。
纯Jquery:
$(document).ready(function(){
let isOpen = false; //=========> use a flag to toggle navbar
function navToggle(){
//Click event for Nav
$("#myNav").on('click', function(event) {
if(!isOpen){
isOpen = !isOpen;
$(this).css("height", "100%");
}else{
isOpen = !isOpen;
$(this).css("height", "0%");
}
});
}
//Click event for Nav Links
$("a").on('click', function(event) {
//Call nav to toggle
isOpen = true;
navToggle();
if (this.hash !== "") {
event.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
window.location.hash = hash;
});
}
});
});