亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的關閉導航功能在單擊時不起作用

我的關閉導航功能在單擊時不起作用

慕姐8265434 2023-05-25 16:16:56
我試圖在單擊菜單圖標時使 left=0vw 但它不起作用。CSS 和 html 工作得很好我是新手,如果它如此明顯,不要取笑 :'(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());
查看完整描述

3 回答

?
慕斯709654

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 選擇它


查看完整回答
反對 回復 2023-05-25
?
森林海

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>


查看完整回答
反對 回復 2023-05-25
?
嚕嚕噠

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>


查看完整回答
反對 回復 2023-05-25
  • 3 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號