我的導航在用戶點擊 "X "或按下esc鍵時關閉,我希望它在用戶點擊一個鏈接時也能關閉。該導航是這樣構建的;
<div class="top-bar"/span>>
< button class="top-bar__nav-toggle hamburger" id="top-nav-toggle">
<span></span>
<span></span>
<span></span>
</button>/span>
< nav class="top-bar__nav collapsed" id="top-bar__nav">
<ul class="top-bar__nav-list nav-ul"/span>>
<li>
<a class="navlink" href="#"/span>> 首頁</a>。
</li>/span>
<li>/span>
<a class="navlink" href="#Portfolio" /span>> 作業</a>。
</li>/span>
<li>/span>
<a class="navlink" href="#About"> 關于</a>
</li>/span>
<li>/span>
<a class="navlink" href="#Contact" /span>> Contact</a>。
</li>/span>
</ul>/span>
</nav>/span>
</div>
是這樣設計的;
body{
background: gray;
}
.top-bar {
align-items: center;
display: flex;
flex-wrap: wrap;
margin-right: 2vw;
}
.top-bar__nav-toggle {
background: transparent;
border: none;
cursor: pointer;
display: none;
字體大小: 50px;
min-width: 5vw;
text-align: center;
transition: 0.25s;
}
.hamburger {
height: 4vw;
position: relative;
}
.hamburger span {
background: white;
border-radius: 25%;
height: 2px;
position: absolute;
transform: translate(-50%, -50%)。
width: 4vw;
}
.hamburger:focus span{
background: rgb(91, 196, 221) 。
outline: none;
}
.hamburger:hover span{
background: rgb(91, 196, 221)。
}
.hamburger span:nth-child(1) {
top: 20%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(2) {
top: 50%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(3) {
top: 80%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger.closed span:nth-child(1) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(2) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(3) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.nav-ul {
display: flex;
justify-content: center;
list-style-type: none;
padding: 0;
}
.top-bar__nav {
background: transparent;
max-height: 400px;
overflow: hidden;
transition: 0.25s;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
transition: all easy-in-out 1s;
}
.top-bar__nav-list {
list-style: none;
}
.top-bar__nav-list li {
text-align: center;
}
.collapsed .top-bar__nav-list a {
字體大小。2vw;
}
.top-bar__nav-list a {
border-bottom: 2px solid transparent;
color: white;
display: inline-block;
字體大小: 6vw;
padding-left: 3vw;
text-decoration: none;
transition: 0.25s;
}
.top-bar__nav-list a:hover {
color: rgb(91, 196, 221) 。
}
.top-bar__nav-list a:focus {
color: rgb(91, 196, 221) 。
outline: none;
}
@media screen and (max-width: 500px) {
.top-bar__nav-list {
align-items: flex-end;
background: white;
flex-direction: column;
height: 100%;
max-height: 100%;
overflow: hidden;
padding-right: 4vw;
position: fixed;
transition: all easy-in-out 1s;
-webkit-transform: translateZ(0)。
-moz-transform。translateZ(0)。
-ms-transform: translateZ(0)。
-o-transform: translateZ(0)。
transform: translateZ(0)。
right: 0;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
max-height: 0;
}
.top-bar__nav-list.collapsed {
padding-right: 6vw;
}
.nav-ul li a{
color: gray;
}
.top-bar__nav-toggle {
display: inline-block;
body {
background: gray;
}
.top-bar {
align-items: center;
display: flex;
flex-wrap: wrap;
margin-right: 2vw;
}
.top-bar__nav-toggle {
background: transparent;
border: none;
cursor: pointer;
display: none;
字體大小: 50px;
min-width: 5vw;
text-align: center;
transition: 0.25s;
}
.hamburger {
height: 4vw;
position: relative;
}
.hamburger span {
background: white;
border-radius: 25%;
height: 2px;
position: absolute;
transform: translate(-50%, -50%)。
width: 4vw;
}
.hamburger:focus span{
background: rgb(91, 196, 221) 。
outline: none;
}
.hamburger:hover span{
background: rgb(91, 196, 221)。
}
.hamburger span:nth-child(1) {
top: 20%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(2) {
top: 50%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(3) {
top: 80%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger.closed span:nth-child(1) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(2) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(3) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.nav-ul {
display: flex;
justify-content: center;
list-style-type: none;
padding: 0;
}
.top-bar__nav {
background: transparent;
max-height: 400px;
overflow: hidden;
transition: 0.25s;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
transition: all easy-in-out 1s;
}
.top-bar__nav-list {
list-style: none;
}
.top-bar__nav-list li {
text-align: center;
}
.collapsed .top-bar__nav-list a {
字體大小。2vw;
}
.top-bar__nav-list a {
border-bottom: 2px solid transparent;
color: white;
display: inline-block;
字體大小: 6vw;
padding-left: 3vw;
text-decoration: none;
transition: 0.25s;
}
.top-bar__nav-list a:hover {
color: rgb(91, 196, 221) 。
}
.top-bar__nav-list a:focus {
color: rgb(91, 196, 221) 。
outline: none;
}
@media screen and (max-width: 500px) {
.top-bar__nav-list {
align-items: flex-end;
background: white;
flex-direction: column;
height: 100%;
max-height: 100%;
overflow: hidden;
padding-right: 4vw;
position: fixed;
transition: all easy-in-out 1s;
-webkit-transform: translateZ(0)。
-moz-transform。translateZ(0)。
-ms-transform: translateZ(0)。
-o-transform: translateZ(0)。
transform: translateZ(0)。
right: 0;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
max-height: 0;
}
.top-bar__nav-list.collapsed {
padding-right: 6vw;
}
.nav-ul li a{
color: gray;
}
.top-bar__nav-toggle {
display: inline-block;
}
而它的功能來自于這段代碼;
(function ( ) {
如果(document.querySelector("#top-nav-toggle") {
var navToggle = document.querySelector("#top-nav-toggle");
function watchNavClose(e) {
var topNav = document.querySelector(".top-bar");
如果(! e.path.includes(topNav)) {
openCloseNav();.
document.documentElement.removeEventListener("click", watchNavClose);
}
}
函式openCloseNav() {
var navToggle = document.querySelector("#top-nav-toggle");
如果(! navToggle.classList.contains("closed")) {
navToggle.classList.add("closed");
document.querySelector("#top-bar__nav").classList.remove("collapsed");/span>
document.querySelector("html").addEventListener("click", watchNavClose);/span>
document.body.style.overflowY = 'hidden';
} else {
document.querySelector("#top-bar__nav").classList.add("collapsed");
document.documentElement.removeEventListener("click", watchNavClose);
document.body.style.overflowY = "roll";
navToggle.classList.remove("closed");
}
}
document.addEventListener('keydown', e => {
如果 ( e.keyCode === 27 ) {
document.documentElement.removeEventListener("click", watchNavClose);
document.body.style.overflowY = "roll";
navToggle.classList.remove("closed");
document.querySelector("#top-bar__nav").classList.add("collapsed");
}
})
navToggle.addEventListener("click", openCloseNav); })
}
})
(); })
我主要是通過教程等來構建的,我也曾試圖通過這里的類似問題來弄清楚,但我是新手,無法弄清楚如何將其轉化為我的代碼。希望得到任何幫助。
uj5u.com熱心網友回復:
使用querySelectorAll為<a>標簽添加了單獨的事件串列,并運行一個函式,在監聽到點擊事件時關閉nav
(function() {
if (document.querySelector("#top-nav-toggle"/span>)) {
var navToggle = document.querySelector("#top-nav-toggle"/span>) 。
function watchNavClose(e) {
var topNav = document.querySelector(".top-bar") 。
if (!e.path.includes(topNav) ) {
openCloseNav()。
document.documentElement.removeEventListener("click", watchNavClose) 。
}
}
function openCloseNav() {
var navToggle = document.querySelector("#top-nav-toggle") 。
if (!navToggle.classList.contains("closure")) {
navToggle.classList.add("closed")。
document.querySelector("#top-bar__nav") 。 classList.remove("collapsed") 。
document.querySelector("html") 。 addEventListener("click", watchNavClose) 。
document.body.style.overflowY = 'hidden';
} else {
document.querySelector("#top-bar__nav") 。 classList.add("collapsed") 。
document.documentElement.removeEventListener("click", watchNavClose)。
document.body.style.overflowY = "roll" ;
navToggle.classList.remove("closed")。
}
}
document.addEventListener('keydown', e => /span> {
if (e.keyCode == 27) {
document.documentElement.removeEventListener("click", watchNavClose)。
document.body.style.overflowY = "roll" ;
navToggle.classList.remove("closed") 。
document.querySelector("#top-bar__nav") 。 classList.add("collapsed") 。
}
})
navToggle.addEventListener("click", openCloseNav) 。
document.querySelectorAll(" 。 navlink")[0].addEventListener("click", closeNav) 。
document.querySelectorAll(" 。 navlink")[1].addEventListener("click", closeNav)。
document.querySelectorAll(" 。 navlink")[2].addEventListener("click", closeNav)。
document.querySelectorAll(" 。 navlink")[3].addEventListener("click", closeNav)。
function closeNav() {
var navToggle = document.querySelector("#top-nav-toggle") 。
document.querySelector("#top-bar__nav") 。 classList.add("collapsed") 。
document.documentElement.removeEventListener("click", watchNavClose)。
document.body.style.overflowY = "roll" ;
navToggle.classList.remove("closed")。
}
}
})
();
body {
background: gray;
}
.top-bar {
align-items: center;
display: flex;
flex-wrap: wrap;
margin-right: 2vw;
}
.top-bar__nav-toggle {
background: transparent;
border: none;
cursor: pointer;
display: none;
字體大小: 50px;
min-width: 5vw;
text-align: center;
transition: 0.25s;
}
.hamburger {
height: 4vw;
position: relative;
}
.hamburger span {
background: white;
border-radius: 25%;
height: 2px;
position: absolute;
transform: translate(-50%, -50%)。
width: 4vw;
}
.hamburger:focus span{
background: rgb(91, 196, 221) 。
outline: none;
}
.hamburger:hover span{
background: rgb(91, 196, 221)。
}
.hamburger span:nth-child(1) {
top: 20%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(2) {
top: 50%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(3) {
top: 80%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger.closed span:nth-child(1) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(2) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(3) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.nav-ul {
display: flex;
justify-content: center;
list-style-type: none;
padding: 0;
}
.top-bar__nav {
background: transparent;
max-height: 400px;
overflow: hidden;
transition: 0.25s;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
transition: all easy-in-out 1s;
}
.top-bar__nav-list {
list-style: none;
}
.top-bar__nav-list li {
text-align: center;
}
.collapsed .top-bar__nav-list a {
字體大小。2vw;
}
.top-bar__nav-list a {
border-bottom: 2px solid transparent;
color: white;
display: inline-block;
字體大小: 6vw;
padding-left: 3vw;
text-decoration: none;
transition: 0.25s;
}
.top-bar__nav-list a:hover {
color: rgb(91, 196, 221) 。
}
.top-bar__nav-list a:focus {
color: rgb(91, 196, 221) 。
outline: none;
}
@media screen and (max-width: 500px) {
.top-bar__nav-list {
align-items: flex-end;
background: white;
flex-direction: column;
height: 100%;
max-height: 100%;
overflow: hidden;
padding-right: 4vw;
position: fixed;
transition: all easy-in-out 1s;
-webkit-transform: translateZ(0)。
-moz-transform。translateZ(0)。
-ms-transform: translateZ(0)。
-o-transform: translateZ(0)。
transform: translateZ(0)。
right: 0;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
max-height: 0;
}
.top-bar__nav-list.collapsed {
padding-right: 6vw;
}
.nav-ul li a{
color: gray;
}
.top-bar__nav-toggle {
display: inline-block;
body {
background: gray;
}
.top-bar {
align-items: center;
display: flex;
flex-wrap: wrap;
margin-right: 2vw;
}
.top-bar__nav-toggle {
background: transparent;
border: none;
cursor: pointer;
display: none;
字體大小: 50px;
min-width: 5vw;
text-align: center;
transition: 0.25s;
}
.hamburger {
height: 4vw;
position: relative;
}
.hamburger span {
background: white;
border-radius: 25%;
height: 2px;
position: absolute;
transform: translate(-50%, -50%)。
width: 4vw;
}
.hamburger:focus span{
background: rgb(91, 196, 221) 。
outline: none;
}
.hamburger:hover span{
background: rgb(91, 196, 221)。
}
.hamburger span:nth-child(1) {
top: 20%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(2) {
top: 50%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger span:nth-child(3) {
top: 80%;
transition: top 125ms 250ms, transform 125ms;
}
.hamburger.closed span:nth-child(1) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(2) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.hamburger.closed span:nth-child(3) {
top: 50%;
transform: translate(-50%, -50%) 旋轉(-45deg) 。
transition: top 125ms, transform 125ms 250ms;
}
.nav-ul {
display: flex;
justify-content: center;
list-style-type: none;
padding: 0;
}
.top-bar__nav {
background: transparent;
max-height: 400px;
overflow: hidden;
transition: 0.25s;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
transition: all easy-in-out 1s;
}
.top-bar__nav-list {
list-style: none;
}
.top-bar__nav-list li {
text-align: center;
}
.collapsed .top-bar__nav-list a {
字體大小。2vw;
}
.top-bar__nav-list a {
border-bottom: 2px solid transparent;
color: white;
display: inline-block;
字體大小: 6vw;
padding-left: 3vw;
text-decoration: none;
transition: 0.25s;
}
.top-bar__nav-list a:hover {
color: rgb(91, 196, 221) 。
}
.top-bar__nav-list a:focus {
color: rgb(91, 196, 221) 。
outline: none;
}
@media screen and (max-width: 500px) {
.top-bar__nav-list {
align-items: flex-end;
background: white;
flex-direction: column;
height: 100%;
max-height: 100%;
overflow: hidden;
padding-right: 4vw;
position: fixed;
transition: all easy-in-out 1s;
-webkit-transform: translateZ(0)。
-moz-transform。translateZ(0)。
-ms-transform: translateZ(0)。
-o-transform: translateZ(0)。
transform: translateZ(0)。
right: 0;
width: 100%。
}
.top-bar__nav.collapsed .top-bar__nav-list {
max-height: 0;
}
.top-bar__nav-list.collapsed {
padding-right: 6vw;
}
.nav-ul li a{
color: gray;
}
.top-bar__nav-toggle {
display: inline-block;
}
<div class="top-bar" >
< button class="top-bar__nav-toggle hamburger" id="top-nav-toggle">
關閉
</button>
< nav class="top-bar__nav collapsed" id="top-bar__nav">
<ul class="top-bar__nav-list nav-ul"/span>>
<li>
<a class="navlink" href="#"/span>> 首頁</a>。
</li>/span>
<li>/span>
<a class="navlink" href="#Portfolio" /span>> 作業</a>。
</li>/span>
<li>/span>
<a class="navlink" href="#About"> 關于</a>
</li>/span>
<li>/span>
<a class="navlink" href="#Contact" /span>> Contact</a>。
</li>/span>
</ul>/span>
</nav>/span>
</div>/span>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321050.html
標籤:
