【问题标题】:Is there a way to easily change my hamburger menu icon back to three lines on the closeNav function?有没有办法在 closeNav 功能上轻松地将我的汉堡菜单图标改回三行?
【发布时间】:2019-10-22 23:38:28
【问题描述】:

我正在尝试创建一个在单击菜单图标时打开和关闭的汉堡菜单。当我第一次打开导航时,背景颜色调整为 100% 的宽度,三行过渡/更改为“X”。但是,当我再次单击“X”关闭导航时,背景宽度变为 0%,但图标没有改变。

我也在尝试使用 JavaScript 来执行此操作。虽然我不确定实现汉堡菜单功能的最简单方法是什么。

目前我尝试使用 onclick 函数和 x.classList.toggle("change");更改菜单图标。

HTML

<div id="mySidenav" class="sidenav">
  <a href="javascript:void(0)" class="closebtn" onclick="closeNav(this)"></a>

</div>

  <span style="font-size:30px;cursor:pointer" onclick="openNav(this)">
 <div class="line1"></div>
<div class="line2"></div>
  <div class="line3"></div>
</span>

CSS

 body {
font-family: "Lato", sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
 background-color: #111;
overflow-x: hidden;
transition: 0.5s;
 padding-top: 60px;
opacity:0.6;
}

.sidenav a {
 padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
 display: block;
 }

.sidenav a:hover {
 color: #f1f1f1;
 }

 .line1, .line2, .line3{
  width:35px;
 height:2px;
 background-color:black;
 margin:6px 0;
 transition:0.3s;
 }


 .change .line1 {
 -webkit-transform: rotate(-45deg) translate(-9px, 6px);
  transform: rotate(-45deg) translate(-9px, 6px);
  -webkit-transition: 0.3s ease;
  }

.change .line2 {opacity: 0;}

 .change .line3 {
   -webkit-transform: rotate(45deg) translate(-8px, -8px);
transform: rotate(45deg) translate(-7px, -2px);
    -webkit-transition: 0.3s ease;

 }

   @media screen and (max-height: 450px) {
  .sidenav {padding-top: 15px;}
  .sidenav a {font-size: 18px;}
}

JAVASCRIPT

   function openNav(x) {
  document.getElementById("mySidenav").style.width = "100%";
  x.classList.toggle("change");

  }


 function closeNav() {
 document.getElementById("mySidenav").style.width = "0";
 x.classList.toggle("change");
  }

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    您向 burger 中添加类并从 #mySidenav &gt; a 中删除类的错误

    在下一个示例中,我将展示它是如何工作的。

    HTML:

    <div id="mySidenav" class="sidenav">
      <a href="javascript:void(0)" class="closebtn" style="background:red" onclick="closeNav()"></a>
    </div>
    <span id="burger" style="font-size:30px;cursor:pointer" onclick="openNav()">
      <div class="line1"></div>
      <div class="line2"></div>
      <div class="line3"></div>
    </span>
    

    JAVASCRIPT:

    function openNav() {
        mySidenav.style.width = "100%";
        burger.classList.add("change");
    }
    
    function closeNav() {
        mySidenav.style.width = "0";
        burger.classList.remove("change");
    }
    
    // mySidenav == document.getElementById("mySidenav")
    // burger == document.getElementById("burger ")
    

    Codepen example

    【讨论】:

    • 谢谢。当我更改背景颜色时,您可能知道为什么现在缺少 X。或者更确切地说,它被隐藏了。我添加了 codepen 示例。
    • X 消失了,因为它位于图层的前一个位置。
    • 我在您的 Codepen 中注意到要关闭汉堡菜单,您需要单击侧导航的填充区域。还有另一种方法吗?而不是围绕它创建一个块?
    • 但是其他人做的不是好主意。您可以在 google 中找到大量可以满足您的先决条件的示例。例如,如果你想做一些简单的事情,你可以检查:70 hamburger examples,或者如果你想做一些大事,你需要使用 js/css 组件框架
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 2010-09-23
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多