Как задать два разных действия при нажатии на кнопку, чтобы при первом нажатии выполнялось первое, при втором второе, при третьем снова первое и тд

У меня есть иконка бургер меню, при нажатии на него срабатывает плавная анимация (верхняя и нижняя полоска поворачиваются образуя крестик, средняя исчезает), мне нужно чтобы при следующем нажатии иконка так же плавно вернулась. Я реализовал это так

JS

let burger = document.querySelector('.burger-menu');
let burger2 = document.querySelector('.burger-menu.active');
let string1 = document.querySelector('.string-1');
let string2 = document.querySelector('.string-2');
let string3 = document.querySelector('.string-3');
let a = 1;
if (a == 1) {
  burger.onclick = function(){
    string1.classList.toggle('active');
    string2.classList.toggle('active');
    string3.classList.toggle('active');
    a = a + 1;
  }
}

if (a == 2) {
  burger2.onclick = function(){
    string1.classList.toggle('default');
    string2.classList.toggle('default');
    string3.classList.toggle('default');
    a = a - 1;
  }
}

CSS

    .string-1.active {
        transition: transform 0.5s ease-in-out;
        transform: translateY(11px) rotate(45deg);
    }

    .string-1.default {
        transition: transform 0.5s ease-in-out;
        transform: translateY(-11px) rotate(-45deg);
    }

    .string-3.active {
        transition: transform 0.5s ease-in-out;
        transform: translateY(-11px) rotate(-45deg);
    }

    .string-3.default {
        transition: transform 0.5s ease-in-out;
        transform: translateY(11px) rotate(45deg);
    }

    .string-2.active {
        transition: opacity 0.3s ease-in-out;
        opacity: 0;
    }
    .string-2.default {
    transition: opacity 0.3s ease-in-out;
    opacity: 1;
    }

Когда я первый раз нажимаю на кнопку добавляется класс active и все нормально работает, но при втором нажатии просто убирается класс active и до класса default не доходит.


Ответы (1 шт):

Автор решения: De.Minov

Осмелюсь предположить (гадание по коду), что у автора вопроса бургер меню состоящее из трёх элементов внутри, которые создают полосы, при нажатии на "кнопку" эти полоски трансформируются в крестик.

В этом случае лишнее тут почти всё, код можно упростить до пару строк, а основное действие перенести на CSS:

document.querySelector('.burder').addEventListener('click', function(e) {
  e.target.classList.toggle('active');
});
.burder {
  display: block;
  width: 40px;
  height: 40px;
  position: relative;
  cursor: pointer;
}

.burder > div {
  display: block;
  width: 40px;
  height: 3px;
  border-radius: 3px;
  background: #333;
  position: absolute;
  left: 50%;
  transform: translate(-50%, -50%);
  transition: 
    transform .5s linear,
    top .5s linear;
  pointer-events: none;
}

.burder > div:nth-child(1) {top: 25%;}
.burder > div:nth-child(2) {top: 50%;}
.burder > div:nth-child(3) {top: 75%;}

.burder.active > div:nth-child(1),
.burder.active > div:nth-child(2),
.burder.active > div:nth-child(3) {top: 50%}

.burder.active > div:nth-child(1),
.burder.active > div:nth-child(2) {
  transform: translate(-50%, -50%) rotate(45deg);
}

.burder.active > div:nth-child(3) {
  transform: translate(-50%, -50%) rotate(-45deg);
}
<div class="burder">
  <div></div>
  <div></div>
  <div></div>
</div>

→ Ссылка