Как задать два разных действия при нажатии на кнопку, чтобы при первом нажатии выполнялось первое, при втором второе, при третьем снова первое и тд
У меня есть иконка бургер меню, при нажатии на него срабатывает плавная анимация (верхняя и нижняя полоска поворачиваются образуя крестик, средняя исчезает), мне нужно чтобы при следующем нажатии иконка так же плавно вернулась. Я реализовал это так
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 шт):
Осмелюсь предположить (гадание по коду), что у автора вопроса бургер меню состоящее из трёх элементов внутри, которые создают полосы, при нажатии на "кнопку" эти полоски трансформируются в крестик.
В этом случае лишнее тут почти всё, код можно упростить до пару строк, а основное действие перенести на 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>