点击菜单内的链接后,如何将汉堡菜单图标恢复为未打开状态?

时间:2019-04-26 23:12:33

标签: javascript jquery html css responsive

因此,我决定为以前未设置动画的汉堡菜单设置动画,因此从一开始就没有此问题。

动画从标准汉堡包样式菜单开始,该菜单具有指向首页不同区域的几个链接。单击后,我将菜单动画化,从汉堡包变成x,向访问者指示他们可以通过单击x来关闭菜单。不过,在点击汉堡包菜单中的链接后,我遇到了一个问题,该图标没有从x重置为汉堡包,这弄乱了第二次打开菜单的方式。如果访客再次打开它,则在单击x时x会变成汉堡包,这没有任何意义。

无论如何,我只是想知道是否有办法做到这一点,以便在单击菜单中的链接时,x返回其未打开的汉堡包形式。这是我的代码:

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>

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您也可以通过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>