Закройте всплывающее окно, нажав на JS - PullRequest
0 голосов
/ 09 июля 2020

Как мне закрыть всплывающее окно, когда я щелкаю по нему / нажимаю на другое?

Я использовал EventListener для выполнения функции для первого всплывающего окна, но когда я делаю то же самое с второе всплывающее окно, первое всплывающее окно перестает работать.

Я пробовал продублировать код JS, используя разные имена функций и идентификаторы для всплывающих окон.

var popup = document.getElementById("myPopup");
  
function myFunction() {
  popup.classList.toggle("show");
}

window.addEventListener('click', ({ target }) => {
  if (!target.closest('.popup') && popup.classList.contains('show')) myFunction();
});

var popup = document.getElementById("myPopup2");
  
function myFunction2() {
  popup.classList.toggle("show");
}

window.addEventListener('click', ({ target }) => {
  if (!target.closest('.popup') && popup.classList.contains('show')) myFunction2();
});
/* Popup container - can be anything you want */
.popup {
  position: relative;
  display: inline-block;
  cursor: pointer;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/* The actual popup */
.popup .popuptext {
  visibility: hidden;
  width: 160px;
  background-color: #555;
  color: #fff;
  text-align: center;
  border-radius: 6px;
  padding: 8px 0;
  position: absolute;
  z-index: 1;
  bottom: 125%;
  left: 50%;
  margin-left: -80px;
}

/* Popup arrow */
.popup .popuptext::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: #555 transparent transparent transparent;
}

/* Toggle this class - hide and show the popup */
.popup .show {
  visibility: visible;
  -webkit-animation: fadeIn 1s;
  animation: fadeIn 1s;
}

/* Add animation (fade in the popup) */
@-webkit-keyframes fadeIn {
  from {opacity: 0;} 
  to {opacity: 1;}
}

@keyframes fadeIn {
  from {opacity: 0;}
  to {opacity:1 ;}
}
<body style="text-align:center">
<h2>Popup</h2>

<div class="popup" onclick="myFunction()">Click me to toggle the popup!
  <span class="popuptext" id="myPopup">A Simple Popup!</span>
</div>

<h2>Popup2</h2>

<div class="popup" onclick="myFunction2()">Click me to toggle the popup!
  <span class="popuptext" id="myPopup2">A Simple Popup again!</span>
</div>


</body>

1 Ответ

0 голосов
/ 09 июля 2020

Просто добавьте еще один слушатель в документ, который закроет все открытые модальные окна.

Затем добавьте / измените его в своем модальном окне, что остановит всплытие событий щелчка.

Конечный результат есть, щелкните в любом месте, и если щелчок был над модальным, модальное окно перехватит и заблокирует, в противном случае щелкните где-нибудь еще, тогда документ получит всплывающее событие и закроет модальное окно ...

Для хорошей меры может добавить слушателя для события нажатия клавиши esc и закрыть все открытые модальные окна

...