[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Спойлеры открываются, но не закрываются
Hunter0k

Здравствуйте, есть такой вот код на JAVASCRIPT с рабочими спойлерами, они открываются поочередно, но не закрываются, как исправить проблему. Пробывал менять classList на toggle - не вышло. Прошу помощи, заранее спасиб.



<div data-modal="spoiler-1">spoiler-1</div>
<div
class="spoiler__body close_prev" id="spoiler-1">
Содержимое spoiler-1
</div>

<div
data-modal="spoiler-2">spoiler-2</div>
<div
class="spoiler__body close_prev" id="spoiler-2">
Содержимое spoiler-2

<div data-modal="spoiler-3">spoiler-3</div>
<div
class="spoiler__body" id="spoiler-3">
Содержимое spoiler-3
</div>
</div>




<style>
.spoiler__body {
position: absolute; width: 250px; height: 0; opacity: 1; visibility: visible; background: #BCC5C8;
border-radius: 4px; box-shadow: none; overflow: hidden; z-index: 2; box-shadow: inset 0 0 1px #888;
transition: 0.3s all; -webkit-transition: 0.3s all; -moz-transition: 0.3s all; -ms-transition: 0.3s all;
}
.spoiler__body.open {height: auto; padding: 1em;}
</style>



<script>
// МОДАЛЬНОЕ ОКНО + СПОЙЛЕР //

document.addEventListener('DOMContentLoaded', () => {
const mOpen = document.querySelectorAll('[data-modal]');
if (mOpen.length == 0) return; // если нет элементов управления всплывающими окнами, прекращаем работу скрипта

const overlay = document.querySelector('.modal__overlay'),
modals = document.querySelectorAll('.modal__body, .spoiler__body'),
mClose = document.querySelectorAll('[data-close]');

for (let el of mOpen) {
el.addEventListener('click', function(e) {
let modalId = el.dataset.modal,
modal = document.getElementById(modalId);

// закрытие спойлера при открытии другого
if (modal.classList.contains("close_prev")) { modalClose(modal); }

modalShow(modal);
});
}

for (let el of mClose) {
el.addEventListener('click', modalClose); // регистрируются обработчик события нажатия на крестик
}

document.addEventListener('keydown', modalClose); // регистрируются обработчик события нажатия на клавишу

function modalShow(modal) {
if (!modal.classList.contains("spoiler__body")) { // условие, при котором откл. оверлей для спойлеров
overlay.classList.add('open');
}
modal.classList.toggle('open');
}

function modalClose(event) {
if ( event.type != 'keydown' || event.keyCode === 27 ) {
for (let modal of modals) {
modal.classList.remove('open');
}
overlay.classList.remove('open');
}
}

}
)
</
script>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.