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

Написал скрипт модального окна, который должен открывать и закрывать его (если нажал вне него), но так выходит, что эти действия, как я понимаю, выполняются одновременно и модальное окно просто не появляется, как правильно разделить первую (появление модальное окна) и вторую (закрытие модального окна) часть кода? Пробовал выносить в отдельные функции передавать переменные, но т.к. я только изучаю JS, видимо делаю что-то не так.

document.addEventListener('click', Modal)

function Modal(e) {
    if (e.target.classList.contains('button_openModal')) {
        let modal = document.getElementById(e.target.dataset.open)
        modal.classList.add('modal_show')

        const modalContent = modal.querySelector('.modal__content')
        if ( (modal.classList.contains('modal_show')) && (e.target != modalContent) ) {
            modal.classList.remove('modal_show')
        }
    }
}
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Для начала можно так. Либо смотреть вёрстку окна и изменять логику иначе.
- modal.classList.add('modal_show')

const modalContent = modal.querySelector('.modal__content')
if ( (modal.classList.contains('modal_show')) && (e.target != modalContent) ) {
    modal.classList.remove('modal_show')
+ } else {
+     modal.classList.add('modal_show')
+ }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const modalWindow = () => {
  if (e.target.classList.contains('button_openModal')) {
    document.getElementById(e.target.dataset.open)?.classList.add('modal_show');
    return;
  }
  if (e.target.classList.contains('button_closeModal')
    || e.target.closest('.modal_show') === null) {
    document.querySelector('.modal_show')?.classList.remove('modal_show');
  }
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы