Home > Software engineering >  Event Listener not firing on mobile
Event Listener not firing on mobile

Time:04-26

Hamburger working on desktop, but not triggering on mobile.

I have tried adding another event listener for 'touchstart' but that doesn't seem to do anything either.

const menuBtn = document.querySelector('.hambody');
let menuOpen = false;

menuBtn.addEventListener('click', () => {
  if (!menuOpen) {
    menuBtn.classList.add('open');
    menuOpen = true;
    console.log('triggered')
  } else {
    menuBtn.classList.remove('open');
    menuOpen = false;
    console.log('triggered')
  }
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

@media (min-width:1024px) {
  .hambody {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 60px;
    z-index: 1000000000000;
  }
}

@media(max-width:1024px) {
  .hambody {
    display: flex;
    justify-content: end;
    align-items: flex-end;
    height: 60px;
    z-index: 1000000000000;
  }
}

.menu-btn {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  cursor: pointer;
  transition: all .5s ease-in-out;
  /* border: 3px solid #fff; */
}

.menu-btn__burger_1 {
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger_2 {
  content: '';
  position: absolute;
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger {}

.menu-btn__burger_1 {
  transform: translateY(-15px);
}


/* ANIMATION */

.menu-btn.open .menu-btn__burger_1 {
  transform: translateY(-5px) rotate(-30deg);
}

.menu-btn.open .menu-btn__burger_2 {
  transform: translateY(5px) rotate(30deg);
}

.menu-btn.open .menu-btn__burger {
  transform: rotate(-20deg);
}

.menu-btn.open .menu-btn__burger::after {
  transform: rotate(20deg);
}
<div >
  <a href="#menu-popup">
    <div >
      <div ></div>
      <div ></div>
    </div>
  </a>
</div>

Live Site: https://dev7.devbot.co.za

CodePudding user response:

the problem is because you add .open class to .hambody element , while in css codes the animation start on .menu-btn.open and you should add open class to .main-btn .

const menuBtnLink = document.querySelector('.hambody');
const menuBtn = document.querySelector('.menu-btn');
let menuOpen = false;

menuBtnLink.addEventListener('click', () => {
  if (!menuOpen) {
    menuBtn.classList.add('open');
    menuOpen = true;
    console.log('triggered')
  } else {
    menuBtn.classList.remove('open');
    menuOpen = false;
    console.log('triggered')
  }
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

@media (min-width:1024px) {
  .hambody {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 60px;
    z-index: 1000000000000;
  }
}

@media(max-width:1024px) {
  .hambody {
    display: flex;
    justify-content: end;
    align-items: flex-end;
    height: 60px;
    z-index: 1000000000000;
  }
}

.menu-btn {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  cursor: pointer;
  transition: all .5s ease-in-out;
  /* border: 3px solid #fff; */
}

.menu-btn__burger_1 {
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger_2 {
  content: '';
  position: absolute;
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger {}

.menu-btn__burger_1 {
  transform: translateY(-15px);
}


/* ANIMATION */

.menu-btn.open .menu-btn__burger_1 {
  transform: translateY(-5px) rotate(-30deg);
}

.menu-btn.open .menu-btn__burger_2 {
  transform: translateY(5px) rotate(30deg);
}

.menu-btn.open .menu-btn__burger {
  transform: rotate(-20deg);
}

.menu-btn.open .menu-btn__burger::after {
  transform: rotate(20deg);
}
<div >
  <a href="#menu-popup">
    <div >
      <div ></div>
      <div ></div>
    </div>
  </a>
</div>

CodePudding user response:

As evolutionxbox suggests, use a button:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

@media (min-width:1024px) {
  .hambody {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 60px;
    z-index: 1000000000000;
  }
}

@media(max-width:1024px) {
  .hambody {
    display: flex;
    justify-content: end;
    align-items: flex-end;
    height: 60px;
    z-index: 1000000000000;
  }
}

.menu-btn {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 50px;
  height: 50px;
  cursor: pointer;
  transition: all .5s ease-in-out;
  /* border: 3px solid #fff; */
}

.menu-btn__burger_1 {
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger_2 {
  content: '';
  position: absolute;
  width: 50px;
  height: 2px;
  background: #A67E51;
  border-radius: 0px;
  transition: all .5s ease-in-out;
}

.menu-btn__burger {}

.menu-btn__burger_1 {
  transform: translateY(-15px);
}


/* ANIMATION */

.menu-btn.open .menu-btn__burger_1 {
  transform: translateY(-5px) rotate(-30deg);
}

.menu-btn.open .menu-btn__burger_2 {
  transform: translateY(5px) rotate(30deg);
}

.menu-btn.open .menu-btn__burger {
  transform: rotate(-20deg);
}

.menu-btn.open .menu-btn__burger::after {
  transform: rotate(20deg);
}
<div >
  <button onclick="querySelector('.menu-btn').classList.toggle('open')">
    <div >
      <div ></div>
      <div ></div>
    </div>
  </button>
</div>

  • Related