<button class="open">
Open
</button>
<div class="hidden-block ">
<ul>
<li>Первый</li>
<li>Второй</li>
<li>Третий</li>
<li>Четвертый</li>
<li>Пятый</li>
</ul>
<button class="close">Close</button>
</div>
.hidden-block {
transform: translateX(-100%);
transition: all 0.3s;
}
.open-hidden-block {
transform: translateX(0);
transition: all 0.3s;
}
let openBlock = document.querySelector('.open');
let backBlock = document.querySelector('.close');
openBlock.addEventListener('click', () => {
document.querySelector('.hidden-block').classList.add('open-hidden-block');
backBlock.addEventListener('click', () => {
document.querySelector('.hidden-block').classList.remove('open-hidden-block')
});
});
backBlock.addEventListener
добавляется внутри обработчика клика. Т.е. каждый раз, как нажимаем на openBlock
, вешается ещё и ещё один обработчик на backBlock
. Достаточно один раз, заранее, так же как сейчас openBlock.addEventListener
openBlock
и backBlock
не меняются, их можно вместо let
объявить const
document.querySelector('.hidden-block')
наверное, не имеет смысла, достаточно один раз, заранее const hiddenBlock = document.querySelector('.hidden-block');
и далее обращаться к этой константе hiddenBlock
.<button class="open" data-target="b1">Open1</button>
<button class="open" data-target="b2">Open2</button>
<div class="hidden-block" id="b1">
<ul>
<li>Первый</li>
</ul>
<button class="close">Close</button>
</div>
<div class="hidden-block" id="b2">
<ul>
<li>Второй</li>
</ul>
<button class="close">Close</button>
</div>
// 1. Константа, значение не меняется
// 2. Это кнопка, а не блок (название фиговое)
// 3. Их может быть несколько на странице
const openButtons = document.querySelectorAll('.open');
// Закрывашка находится внутри блока, поэтому искать ее нужно именно внутри блока
// чтобы она закрывала только свой блок. Это выкидываем
// let backBlock = document.querySelector('.close');
// Вешаем клики на все открывашки
openButtons.forEach(btn => {
btn.addEventListener('click', e => {
// дергаем ID из data-атрибута
const targetId = e.target.dataset.target;
document.getElementById(targetId).classList.add('open-hidden-block');
});
});
// Перебираем все блоки и ищем в них закрывашки
document.querySelectorAll('.hidden-block').forEach(block => {
const closer = block.querySelector('.close');
closer.addEventListener('click', () => {
block.classList.remove('open-hidden-block');
});
});