如何处理容器中的事件元素?
How to handle event element in container?
我想点击btnToggle
,导航会运行但是我不知道为什么这段代码有时成功,有时不成功。
请帮帮我,谢谢大家
const nav = document.querySelector(".header-nav");
const btnToggle = document.querySelector(".header__btn-toggle");
document.addEventListener("click", (e) => {
if (e.target.className == "header__btn-toggle") {
nav.style.right = "0";
// right to left
} else {
nav.style.right = "-100%";
//left to right
}
})
<header class="header">
<a href="#" class="header__logo">
<img src="./assets/logo.png" alt="Tvelia">
</a>
<ul class="header-nav">
<a href="#" class="header-nav__item header-nav__item--active">Home</a>
<a href="#" class="header-nav__item">Adventures</a>
<a href="#" class="header-nav__item">About</a>
<a href="#" class="header-nav__item">Contact</a>
<a href="#" class="header-nav__item">Login</a>
<a href="#" class="header-nav__item">Signup</a>
</ul>
<div class="header__btn-toggle">
<div></div>
<div></div>
<div></div>
</div>
</header>
首先,您应该将 addEventListener
附加到 btnToggle
而不是 document
。
你很接近。因为您将事件侦听器附加到 document,所以如果您单击页面上的任意位置,您的回调函数实际上会 运行。而且因为浏览器有一种叫做事件冒泡的东西,这可能是你不一致的原因。
相反,您应该只将事件侦听器放在按钮上。我会这样做:
const nav = document.querySelector(".header-nav");
const btnToggle = document.querySelector(".header__btn-toggle");
btnToggle.addEventListener("click", () => { nav.style.right = "0" })
const moveNavRight = (e) => {
if (e.target !== btnToggle) nav.style.right = "-100%"
}
// If you wanted to change the hide effect to only work when you click the nav
// (not anywhere on the page), you would change the following line to
// nav.addEventListener("click", moveNavRight)
document.addEventListener("click", moveNavRight)
在这里,为了更清楚一点,我将 moveNavRight 提取到一个单独的函数中。所以这段代码的工作原理是:如果您单击 btnToggle,导航将向右移动 0。但是如果您在其他任何地方单击 page/document,则导航将向右移动 -100%。
希望这就是您要找的!
我想点击btnToggle
,导航会运行但是我不知道为什么这段代码有时成功,有时不成功。
请帮帮我,谢谢大家
const nav = document.querySelector(".header-nav");
const btnToggle = document.querySelector(".header__btn-toggle");
document.addEventListener("click", (e) => {
if (e.target.className == "header__btn-toggle") {
nav.style.right = "0";
// right to left
} else {
nav.style.right = "-100%";
//left to right
}
})
<header class="header">
<a href="#" class="header__logo">
<img src="./assets/logo.png" alt="Tvelia">
</a>
<ul class="header-nav">
<a href="#" class="header-nav__item header-nav__item--active">Home</a>
<a href="#" class="header-nav__item">Adventures</a>
<a href="#" class="header-nav__item">About</a>
<a href="#" class="header-nav__item">Contact</a>
<a href="#" class="header-nav__item">Login</a>
<a href="#" class="header-nav__item">Signup</a>
</ul>
<div class="header__btn-toggle">
<div></div>
<div></div>
<div></div>
</div>
</header>
首先,您应该将 addEventListener
附加到 btnToggle
而不是 document
。
你很接近。因为您将事件侦听器附加到 document,所以如果您单击页面上的任意位置,您的回调函数实际上会 运行。而且因为浏览器有一种叫做事件冒泡的东西,这可能是你不一致的原因。
相反,您应该只将事件侦听器放在按钮上。我会这样做:
const nav = document.querySelector(".header-nav");
const btnToggle = document.querySelector(".header__btn-toggle");
btnToggle.addEventListener("click", () => { nav.style.right = "0" })
const moveNavRight = (e) => {
if (e.target !== btnToggle) nav.style.right = "-100%"
}
// If you wanted to change the hide effect to only work when you click the nav
// (not anywhere on the page), you would change the following line to
// nav.addEventListener("click", moveNavRight)
document.addEventListener("click", moveNavRight)
在这里,为了更清楚一点,我将 moveNavRight 提取到一个单独的函数中。所以这段代码的工作原理是:如果您单击 btnToggle,导航将向右移动 0。但是如果您在其他任何地方单击 page/document,则导航将向右移动 -100%。
希望这就是您要找的!