document.addEventListener('DOMContentLoaded', () => {
const modals = document.querySelectorAll('.modal');
const openButtons = document.querySelectorAll('[data-modal-target]');
const closeButtons = document.querySelectorAll('.close-btn');
// Функция открытия
const openModal = (modal) => {
if (!modal) return;
modal.classList.add('open');
document.body.classList.add('modal-open');
};
// Функция закрытия (всех или конкретного)
const closeModal = (modal) => {
modal.classList.remove('open');
// Проверяем, остались ли другие открытые окна
const anyOpen = document.querySelector('.modal.open');
if (!anyOpen) document.body.classList.remove('modal-open');
};
// 1. Слушатели для кнопок открытия
openButtons.forEach(btn => {
btn.addEventListener('click', (e) => {
e.preventDefault();
const targetSelector = btn.getAttribute('data-modal-target');
const modal = document.querySelector(targetSelector);
openModal(modal);
});
});
// 2. Слушатели для кнопок закрытия (крестики)
closeButtons.forEach(btn => {
btn.addEventListener('click', () => {
const modal = btn.closest('.modal');
closeModal(modal);
});
});
// 3. Закрытие кликом по серому фону (overlay)
window.addEventListener('click', (e) => {
if (e.target.classList.contains('modal')) {
closeModal(e.target);
}
});
// 4. Закрытие клавишей Escape
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
const activeModal = document.querySelector('.modal.open');
if (activeModal) closeModal(activeModal);
}
});
});