jQuery menu not showing

Viewed 73

I'm making a multi-level hamburger menu, although whenever I click the menu icon, it doesn't show. I have a feeling it's to do with the 'right' attribute and how it's off screen but I can't think of a way to fix it. It's also an issue once the user clicks one of the options in the menu, the sub-menu never shows either (also to do with 'right').

jQuery:

var $menuTrigger = $('.js-menuToggle');
var $topNav = $('.js-topPushNav');
var $openLevel = $('.js-openLevel');
var $closeLevel = $('.js-closeLevel');
var $closeLevelTop = $('.js-closeLevelTop');
var $navLevel = $('.js-pushNavLevel');

function openPushNav() {
  $topNav.addClass('isOpen');
  $('body').addClass('pushNavIsOpen');
}

function closePushNav() {
  $topNav.removeClass('isOpen');
  $openLevel.siblings().removeClass('isOpen');
  $('body').removeClass('pushNavIsOpen');
}

$menuTrigger.on('click touchstart', function(e) {
  e.preventDefault();
  if ($topNav.hasClass('isOpen')) {
    closePushNav();
  } else {
    openPushNav();
  }
});

$openLevel.on('click touchstart', function(){
  $(this).next($navLevel).addClass('isOpen');
});

$closeLevel.on('click touchstart', function(){
  $(this).closest($navLevel).removeClass('isOpen');
});

$closeLevelTop.on('click touchstart', function(){
  closePushNav();
});

$('.screen').click(function() {
    closePushNav();
});

CSS:

@media screen and (max-width: 600px) {
  .pushNav {
    width: 75%;
    right: -75%;
  }
}
@media screen and (min-width: 601px) {
  .pushNav {
    width: 350px;
    right: -350px;
  }
}
ul.pushNav {
  padding: 0;
  margin: 0;
  list-style-type: none;
}

ul.pushNav.js-topPushNav {
}

.pushNav {
  height: 100%;
  position: fixed;
  top: 0;
  z-index: 100;
  overflow: hidden;
  background: #2e2f35;
  -webkit-transition: ease-in-out 0.5s;
  transition: ease-in-out 0.5s;
}
.pushNav hr {
  border: 1px solid #555;
}

.pushNav, .pushNav a {
  font-size: 1em;
  font-family: helvetica, sens-serif;
  font-weight: 100;
  color: #000;
  text-decoration: none;
}

.pushNavIsOpen {
  overflow: auto;
  height: 100%;
}

.closeLevel, .openLevel {
  cursor: pointer;
}

.openLevel, .closeLevel, .pushNav a {
  padding: 1em 0;
  display: block;
  text-indent: 20px;
  -webkit-transition: background 0.4s ease-in-out;
  transition: background 0.4s ease-in-out;
  right: 0px;
}
.openLevel:hover, .closeLevel:hover, .pushNav a:hover {
  background: #494a50;
  right: 0px;
}

.hdg {
  background-color: #1e1e24;
}

.closeLevel, closelevel > i {
  font-size: 1em;
  color: #fff;
}

.burger {
  position: absolute;
  top: 24px;
  right: 48px;
}
.burger i {
  font-size: 3em;
}

.screen {
  position: fixed;
  background: rgba(0, 0, 0, 0.7);
  width: 100%;
  height: 0;
  top: 0;
  bottom: 0;
  right: 0;
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-in-out;
  transition: opacity 0.5s ease-in-out;
}

.pushNavIsOpen .screen {
  height: 100%;
  opacity: 1;
  display: block;
}

.fa {
  display: inline;
  padding: 5px;
}

body {
  background-size: 100% auto;
  background-repeat: no-repeat;}

.wrapper {
  max-width: 625px;
  margin: 120px auto;
  padding: 0 20px;
  color: #000;
  font-family: "Trebuchet MS", Helvetica, sans-serif;
  font-weight: 100;
  font-size: 1.1em;
  line-height: 1.4em;
}
.wrapper a {
  color: #ffff;
  text-decoration: none;
}
.wrapper button {
  background-color: #20c270;
  margin: 50px auto;
  display: block;
  padding: 10px 40px;
  border: none;
}
.wrapper button:hover {
  background-color: #18a960;
}
.wrapper button a {
  color: #000;
  font-size: 2em;
}

HTML:

<link rel="stylesheet" href="//libapps-custom.library.curtin.edu.au/css/fontawesome.min.css?ver=5.8.11">
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

<nav>
  <ul class="pushNav js-topPushNav">
    <li class="closeLevel js-closeLevelTop hdg">
      <i class="fa fa-close"></i>
      Close
    </li>
    <li>
      <a href="#">
        <i class="fa fa-home"></i>
        Home
      </a>
    </li>

    <li><!-- Begin section 1 -->
      <div class="openLevel js-openLevel">
        Section 1 
        <i class="fa fa-chevron-right"></i>
      </div>
      <ul class="pushNav pushNav_level js-pushNavLevel">
        <li class="closeLevel js-closeLevel hdg">
          <i class="fa fa-chevron-left"></i>
          Go Back
        </li>
        <li>
          <div class="openLevel js-openLevel">
            Section 1.1
            <i class="fa fa-chevron-right"></i>
          </div>
          <ul class="pushNav pushNav_level js-pushNavLevel">
            <li class="closeLevel js-closeLevel hdg">
              <i class="fa fa-chevron-left"></i>
              Go Back
            </li>
            <li><a href="#">Link to page five</a></li>
            <li><a href="#">Link to page six</a></li>
            <li><a href="#">Link to page seven</a></li>
            <li><a href="#">Link to page eight</a></li>
            <li><a href="#">Link to page nine</a></li>
          </ul>
        </li>
        <li>
          <div class="openLevel js-openLevel">
            Secion 1.2
            <i class="fa fa-chevron-right"></i>
          </div>
          <ul class="pushNav pushNav_level js-pushNavLevel">
            <li class="closeLevel js-closeLevel hdg">
              <i class="fa fa-chevron-left"></i>
              Go Back
            </li>
            <li><a href="#">Link to page ten</a></li>
            <li><a href="#">Link to page eleven</a></li>
            <li><a href="#">Link to page twelve</a></li>
            <li><a href="#">Link to page thirteen</a></li>
          </ul>
        </li>
        <li><a href="#">Link to page three</a></li>
        <li><a href="#">Link to page four</a></li>
      </ul>
    </li><!-- End section 1 -->

    <li>
      <div class="openLevel js-openLevel">
        Section 2 
        <i class="fa fa-chevron-right"></i>
      </div>
      <ul class="pushNav pushNav_level js-pushNavLevel">
        <li class="closeLevel js-closeLevel hdg">
          <i class="fa fa-chevron-left"></i>
          Go Back
        </li>
        <li><a href="#">Link to page fourteen</a></li>
        <li><a href="#">Link to page fifteen</a></li>
        <li><a href="#">Link to page sixteen</a></li>
        <li><a href="#">Link to page seventeen</a></li>
        <li><a href="#">Link to page eighteen</a></li>
        <li><a href="#">Link to page nineteen</a></li>
      </ul>
    </li>
    <hr/>
    <li>
      <a href="#">Link to page one</a>
    </li>
    <li>
      <a href="#">Link to page two</a>
    </li>
  </ul>
</nav>

<div class="wrapper">

  <div class="burger js-menuToggle">
    <i class="fa fa-bars" style="color: #000"></i>
  </div>

</div>

<span class="screen"></span>

https://codepen.io/adms2000/pen/LYGYwPa

Thanks!

1 Answers

All what you have to do is to add a class with left attribute:

ul.pushNav.js-topPushNav.isOpen {
  left:0;
}

Here is a working snippet, also a codepen:

var $menuTrigger = $('.js-menuToggle');
var $topNav = $('.js-topPushNav');
var $openLevel = $('.js-openLevel');
var $closeLevel = $('.js-closeLevel');
var $closeLevelTop = $('.js-closeLevelTop');
var $navLevel = $('.js-pushNavLevel');

function openPushNav() {
  $topNav.addClass('isOpen');
  $('body').addClass('pushNavIsOpen');
}

function closePushNav() {
  $topNav.removeClass('isOpen');
  $openLevel.siblings().removeClass('isOpen');
  $('body').removeClass('pushNavIsOpen');
}

$menuTrigger.on('click touchstart', function(e) {
  e.preventDefault();
  if ($topNav.hasClass('isOpen')) {
    closePushNav();
  } else {
    openPushNav();
  }
});

$openLevel.on('click touchstart', function(){
  $(this).next($navLevel).addClass('isOpen');
});

$closeLevel.on('click touchstart', function(){
  $(this).closest($navLevel).removeClass('isOpen');
});

$closeLevelTop.on('click touchstart', function(){
  closePushNav();
});

$('.screen').click(function() {
    closePushNav();
});
@media screen and (max-width: 600px) {
  .pushNav {
    width: 75%;
    right: -75%;
  }
}
@media screen and (min-width: 601px) {
  .pushNav {
    width: 350px;
    right: -350px;
  }
}
ul.pushNav {
  padding: 0;
  margin: 0;
  list-style-type: none;
}

ul.pushNav.js-topPushNav.isOpen {
  left:0;
}



.pushNav {
  height: 100%;
  position: fixed;
  top: 0;
  z-index: 100;
  overflow: hidden;
  background: #282a30;
  -webkit-transition: ease-in-out 0.5s;
  transition: ease-in-out 0.5s;
}
.pushNav hr {
  border: 1px solid #555;
}

.pushNav, .pushNav a {
  font-size: 1em;
  font-family: helvetica, sens-serif;
  font-weight: 100;
  color: #FFF;
  text-decoration: none;
}

.pushNavIsOpen {
  overflow: auto;
  height: 100%;
}

.closeLevel, .openLevel {
  cursor: pointer;
}

.openLevel, .closeLevel, .pushNav a {
  padding: 1em 0;
  display: block;
  text-indent: 20px;
  -webkit-transition: background 0.4s ease-in-out;
  transition: background 0.4s ease-in-out;
  right: 0px;
}
.openLevel:hover, .closeLevel:hover, .pushNav a:hover {
  background: #494a50;
  right: 0px;
}

.hdg {
  background-color: #1e1e24;
}

.closeLevel, closelevel > i {
  font-size: 1em;
  color: #fff;
}

.burger {
  position: absolute;
  top: 24px;
  right: 48px;
}
.burger i {
  font-size: 3em;
}

.screen {
  position: fixed;
  background: rgba(0, 0, 0, 0.7);
  width: 100%;
  height: 0;
  top: 0;
  bottom: 0;
  right: 0;
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-in-out;
  transition: opacity 0.5s ease-in-out;
}

.pushNavIsOpen .screen {
  height: 100%;
  opacity: 1;
  display: block;
}

.fa {
  display: inline;
  padding: 5px;
}

body {
  background-size: 100% auto;
  background-repeat: no-repeat;}

.wrapper {
  max-width: 625px;
  margin: 120px auto;
  padding: 0 20px;
  color: #000;
  font-family: "Trebuchet MS", Helvetica, sans-serif;
  font-weight: 100;
  font-size: 1.1em;
  line-height: 1.4em;
}
.wrapper a {
  color: #ffff;
  text-decoration: none;
}
.wrapper button {
  background-color: #20c270;
  margin: 50px auto;
  display: block;
  padding: 10px 40px;
  border: none;
}
.wrapper button:hover {
  background-color: #18a960;
}
.wrapper button a {
  color: #000;
  font-size: 2em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="//libapps-custom.library.curtin.edu.au/css/fontawesome.min.css?ver=5.8.11">
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>

<nav>
  <ul class="pushNav js-topPushNav">
    <li class="closeLevel js-closeLevelTop hdg">
      <i class="fa fa-close"></i>
      Close
    </li>
    <li>
      <a href="#">
        <i class="fa fa-home"></i>
        Home
      </a>
    </li>
    
    <li><!-- Begin section 1 -->
      <div class="openLevel js-openLevel">
        Section 1 
        <i class="fa fa-chevron-right"></i>
      </div>
      <ul class="pushNav pushNav_level js-pushNavLevel">
        <li class="closeLevel js-closeLevel hdg">
          <i class="fa fa-chevron-left"></i>
          Go Back
        </li>
        <li>
          <div class="openLevel js-openLevel">
            Section 1.1
            <i class="fa fa-chevron-right"></i>
          </div>
          <ul class="pushNav pushNav_level js-pushNavLevel">
            <li class="closeLevel js-closeLevel hdg">
              <i class="fa fa-chevron-left"></i>
              Go Back
            </li>
            <li><a href="#">Link to page five</a></li>
            <li><a href="#">Link to page six</a></li>
            <li><a href="#">Link to page seven</a></li>
            <li><a href="#">Link to page eight</a></li>
            <li><a href="#">Link to page nine</a></li>
          </ul>
        </li>
        <li>
          <div class="openLevel js-openLevel">
            Secion 1.2
            <i class="fa fa-chevron-right"></i>
          </div>
          <ul class="pushNav pushNav_level js-pushNavLevel">
            <li class="closeLevel js-closeLevel hdg">
              <i class="fa fa-chevron-left"></i>
              Go Back
            </li>
            <li><a href="#">Link to page ten</a></li>
            <li><a href="#">Link to page eleven</a></li>
            <li><a href="#">Link to page twelve</a></li>
            <li><a href="#">Link to page thirteen</a></li>
          </ul>
        </li>
        <li><a href="#">Link to page three</a></li>
        <li><a href="#">Link to page four</a></li>
      </ul>
    </li><!-- End section 1 -->
    
    <li>
      <div class="openLevel js-openLevel">
        Section 2 
        <i class="fa fa-chevron-right"></i>
      </div>
      <ul class="pushNav pushNav_level js-pushNavLevel">
        <li class="closeLevel js-closeLevel hdg">
          <i class="fa fa-chevron-left"></i>
          Go Back
        </li>
        <li><a href="#">Link to page fourteen</a></li>
        <li><a href="#">Link to page fifteen</a></li>
        <li><a href="#">Link to page sixteen</a></li>
        <li><a href="#">Link to page seventeen</a></li>
        <li><a href="#">Link to page eighteen</a></li>
        <li><a href="#">Link to page nineteen</a></li>
      </ul>
    </li>
    <hr/>
    <li>
      <a href="#">Link to page one</a>
    </li>
    <li>
      <a href="#">Link to page two</a>
    </li>
  </ul>
</nav>

<div class="wrapper">
  
  <div class="burger js-menuToggle">
    <i class="fa fa-bars" style="color: #000"></i>
  </div>

</div>

<span class="screen"></span>

Related