3 回答

TA貢獻1840條經驗 獲得超5個贊
document.getElementsByClassName 返回具有給定類名的所有元素的數組。
要獲得可能是您想要的第一個元素,您需要選擇此數組的第一個元素。
還要注意下面傳遞的函數。
這是您更改后的代碼
var menuEl = document.getElementsByClassName("bx-menu")[0];
var navEl = document.getElementsByClassName("nav")[0];
function closenav(){
if(navEl.style.left === "-100vw"){
navEl.style.left = "0vw";
} else {
navEl.style.left = "-100vw";
}
}
menuEl.addEventListener("click",closenav);// Note you need to pass the function here not call the function so I’ve removed the ()
var menuEl = document.getElementsByClassName("bx-menu");
var navEl = document.getElementsByClassName("nav");
function closenav(){
if(navEl.style.left === "-100vw"){
navEl.style.left = "0vw";
} else {
navEl.style.left = "-100vw";
}
}
// 你需要這個兩次嗎??如果是這樣再次刪除 () menuEl.addEventListener("click",closenav());
如果導航欄是唯一的,您可能想給它一個唯一的 ID,然后您可以使用 document.getElementById 選擇它

TA貢獻2011條經驗 獲得超2個贊
具體看document.getElementsByClassName("bx-menu")[0],我添加了[0]作為getElementsByClassName返回的類的出現數組。
closenav 還要確保在像這樣將它添加為事件監聽器時刪除括號:menuEl.addEventListener("click", closenav);或者像我在下面的代碼片段中所做的那樣將整個函數封裝在事件監聽器中。
var menuEl = document.getElementsByClassName("bx-menu")[0];
menuEl.addEventListener("click", function (event) {
var navEl = document.getElementsByClassName("nav")[0];
if(navEl.style.left === "-100vw"){
navEl.style.left = "0vw";
} else {
navEl.style.left = "-100vw";
}
});
.nav {
background-color: blue;
height: 100px;
width: 100px;
position: absolute;
}
<div class="bx-menu">
Click here!
</div>
<div class="nav" style="left: -100vw;">
</div>

TA貢獻1784條經驗 獲得超7個贊
一個建議是使用#id而不是.class通過使用來獲取唯一元素getElementById。否則,如果您使用getElementsByClass.
我還建議:
a) 使用transform: translate而不是動畫,left因為 left 會導致重新計算所有元素,而 transform 只考慮移動元素,并且
b) 切換一個類而navEl.classList.toggle()不是在你的方法中查找樣式屬性。
不要介意CSS。這主要是為了設置東西。
let navEl = document.getElementById("nav");
let hamburgerEl = document.getElementById("hamburger");
hamburgerEl.addEventListener("click", toggleMenu);
function toggleMenu() {
navEl.classList.toggle("open");
}
#nav {
position: fixed;
left: 0px;
top: 0px;
width: 200px;
height: 400px;
padding: 1rem; /* 'rem' is the size of the font in the body element */
text-align: center;
background-color: lightblue;
border-right: 1px solid darkgrey;
transform: translateX(-100%);
transition: transform 400ms;
}
#nav.open { /* the event listener toggles this class */
transform: translateX(0px);
}
#hamburger {
position: relative; /* in order to use z-index to place #hamburger over the menu */
z-index: 100;
width: 20px;
height: 20px;
display: flex; /* to center the strokes */
align-items: center;
cursor: pointer;
}
#strokes,
#strokes::before,
#strokes::after
{
width: 100%;
height: 2px;
background-color: black;
}
#strokes::before, /* pseudo-elements */
#strokes::after {
content: '';
display: block;
}
#strokes::before {
transform: translateY(-6px);
}
#strokes::after {
transform: translateY(4px);
}
<body>
<div id="nav">
MENU
</div>
<div id="hamburger">
<div id="strokes"></div>
</div>
</body>
添加回答
舉報