单击菜单内部 link 后,如何将汉堡菜单图标重置为未打开状态?

How to reset hamburger menu icon back to unopened after link inside of menu is clicked?

所以我决定为我的汉堡菜单制作动画,它以前是非动画的,所以这个问题从一开始就无关紧要。

动画开始时是一个标准的汉堡包样式菜单,其中有多个 link 指向主页的不同区域。单击时,我将菜单动画从汉堡包变为 x,向访问者表明他们可以通过单击 x 关闭菜单。不过我 运行 遇到了一个问题,在单击汉堡菜单中的 link 后,图标不会从 x 重置回汉堡,这会弄乱菜单在第二个菜单中的打开方式时间。如果访问者再次打开它,则单击 x 时 x 会变成汉堡包,并且没有任何意义。

无论如何,我只是想知道是否有一种方法可以使当单击菜单中的 link 时,x returns 变为未打开的汉堡包形式。这是我的代码:

var links = document.querySelectorAll('.menu a');
    var linksLength = links.length

    for(var i = 0; i < linksLength; i++) {
      links[i].addEventListener('click', function() {
        document.getElementById('toggle').checked = false;
      });
    }

    $(document).ready(function(){
 $('.icon').click(function(){
  $(this).toggleClass('open');
 });
});
.header {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 327px;
  height: 70px;
  line-height: 70px;
  padding-left: 15px;
  font-family: 'Burbank', 'Alegreya Sans SC', 'Alegreya Sans SC Black', sans-serif;
  font-size: 40px;
  color: #ffffff;
  z-index: 2;
  user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -webkit-user-select: none;
}

.heading {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 327px;
  height: 67px;
  padding-left: 15px;
  z-index: 3;
}

.nav {
  position: absolute;
  top: 0px;
  height: 70px;
  background-color: #223861;
  box-shadow: 0px 3px 10px 0px rgba(39,38,38,0.6);
  -webkit-box-shadow: 0px 3px 10px 0px rgba(39,38,38,0.6);
  -moz-box-shadow: 0px 3px 10px 0px rgba(39,38,38,0.6);
  text-align: right;
  z-index: 1;
  user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -webkit-user-select: none;
}

.icon {
  position: relative;
  float: right;
  width: 100px;
  height: 70px;
  padding-left: 13px;
  cursor: pointer;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
}

.icon span {
  position: absolute;
  left: 0;
  display: block;
  height: 5px;
  width: 45px;
  margin-left: 75px;
  margin-top: 18px;
  background: #ffffff;
  border-radius: 4px;
  opacity: 1;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .25s ease-in-out;
  -moz-transition: .25s ease-in-out;
  -o-transition: .25s ease-in-out;
  transition: .25s ease-in-out;
}

.icon span:nth-child(1) {
  top: 0px;
}

.icon span:nth-child(2) {
  top: 12px;
}

.icon span:nth-child(3) {
  top: 24px;
}

.icon.open span:nth-child(1) {
  top: 12px;
  -webkit-transform: rotate(135deg);
  -moz-transform: rotate(135deg);
  -o-transform: rotate(135deg);
  transform: rotate(135deg);
}

.icon.open span:nth-child(2) {
  opacity: 0;
  left: -60px;
}

.icon.open span:nth-child(3) {
  top: 12px;
  -webkit-transform: rotate(-135deg);
  -moz-transform: rotate(-135deg);
  -o-transform: rotate(-135deg);
  transform: rotate(-135deg);
}

  .header {
    width: 90%;
  }

  .icon {
    display: block;
    padding-right: 22px;
    cursor: pointer;
  }

  .menu {
    max-height: 0px;
    transition: max-height .5s ease-in-out;
    opacity: 0;
    overflow: hidden;
  }

  .menu a {
    display: block;
    height: 8vh;
    line-height: 8vh;
    margin: 0px;
    padding: 0px 0px;
    border-bottom: 1px solid #eaeaeb;
  }

  #toggle {
    display: none;
  }

  #toggle:checked + .menu {
    max-height: 800px;
    opacity: 1;
  }

  #toggle:not(checked) + .menu {
    max-height: 0px;
    opacity: 1;
}
<label class="nav" for="toggle" style="z-index:999;">
  <div class="icon">
    <span></span>
    <span></span>
    <span></span>
  </div>
  <input type="checkbox" id="toggle"/>
  <div class="menu">
    <a href="#assault-rifle-nav">Assault Rifles</a>
    <a href="#submachine-gun-nav">Submachine Guns</a>
    <a href="#shotgun-nav">Shotguns</a>
    <a href="#sniper-rifle-nav">Sniper Rifles</a>
    <a href="#pistol-nav">Pistols</a>
    <a href="#explosive-nav">Explosives</a>
    <a href="#other-nav">Other</a>
    <a href="#vaulted-nav" id="vaulted">Vaulted</a>
  </div>
</label>

<script src="https://code.jquery.com/jquery-3.4.0.min.js"></script>

只需在 $(document).ready() 函数中添加此点击处理程序,即可在点击其中一个菜单链接时从汉堡包图标中删除 open CSS class:

    $('.menu a').click(function() {
       $('.icon').removeClass('open');
    });

您也可以通过PURE CSS

来做到这一点

.navigation__checkbox {
    display: none
}

.navigation__button {
    height: 7rem;
    width: 7rem;
    position: fixed;
    top: 1rem;
    left: 1rem;
    border-radius: 50%;
    z-index: 2000;
    box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.1);
    text-align: center;
    cursor: pointer
}

.navigation__icon {
    position: relative;
    margin-top: 3.5rem;
    user-select: none;
}

.navigation__icon,
.navigation__icon::before,
.navigation__icon::after {
    width: 3rem;
    height: 2px;
    background-color: #333;
    display: inline-block
}

.navigation__icon::before,
.navigation__icon::after {
    content: "";
    position: absolute;
    left: 0;
    transition: all .2s
}

.navigation__icon::before {
    top: -.8rem
}

.navigation__icon::after {
    top: .8rem
}

.navigation__button:hover .navigation__icon::before {
    top: -1rem
}

.navigation__button:hover .navigation__icon::after {
    top: 1rem
}

.navigation__checkbox:checked+.navigation__button .navigation__icon {
    background-color: transparent
}

.navigation__checkbox:checked+.navigation__button .navigation__icon::before {
    top: 0;
    transform: rotate(135deg)
}

.navigation__checkbox:checked+.navigation__button .navigation__icon::after {
    top: 0;
    transform: rotate(-135deg)
}
<div class="navigation">
    <input type="checkbox" class="navigation__checkbox" id="navi-toggle">
    <label for="navi-toggle" class="navigation__button">
        <span class="navigation__icon">&nbsp;</span>
    </label>
</div>