Как повторно использовать Javascript событий для идентичных HTML компонентов? - PullRequest
0 голосов
/ 24 апреля 2020

Я изо всех сил пытаюсь использовать код Javascript ниже. У меня есть 2 окна, каждое из которых должно открывать модальное окно, когда пользователь нажимает на него. enter image description here В данный момент код работает только для одного ящика. Я не хочу копировать, вставлять все, потому что я хочу больше ящиков с теми же действиями. Очевидно, я не могу просто присвоить блокам один и тот же идентификатор (hover-box), поэтому я ищу способ сделать код Javascript многоразовым.

Как мне этого добиться?

//ModalContent
const modalContent = document.querySelector('#my-modal-content');
const modalBtnContent = document.querySelector('#hover-box');
const closeBtnContent = document.querySelector('#closeContent');

//ContentEvents
    modalBtnContent.addEventListener('click', function () {
    openModal(modalContent);
    });
    closeBtnContent.addEventListener('click', function () {
      closeModal(modalContent);
    });
    window.addEventListener('click', outsideClickContent);
    window.addEventListener('keydown', outsideClickContent);

    // Open contentModal
    function openModalContent() {
      modalNav.style.display = 'block';
      modalContent.style.display = 'block';
    }
    
    // Close contentModal
    function closeModalContent() {
      modalNav.style.display = 'none';
      modalContent.style.display = 'none';
    }

    // Escape key close contentModal
    function outsideClickContent(e) {
      if (e.keyCode == 27) {
        closeModalContent(modalContent);
      }
    }
    //Hiding body overflow when modal open
    function openModal(element) {
      element.style.display = 'block';
      document.body.style.overflowY = "hidden";
    }

    //Showing body overflow when modal closed
    function closeModal(element) {
      element.style.display = 'none';
      document.body.style.overflowY = "auto";
    }
.modal {
  
  position: fixed;
  z-index: 1;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  overflow: auto;
  color: #fff;
  background-color: rgba(0, 0, 0, 0.5);
}

.modal-content {
  margin: 10% auto;
  width: 90%;
  box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.2), 0 7px 20px 0 rgba(0, 0, 0, 0.17);
  animation-name: modalopen;
  animation-duration: var(--modal-duration);
}

.modal-header h2,
.modal-footer h3 {
  margin: 0;
  text-align: center;
}

.modal-header {
  background: var(--modal-color);
  padding: 25px;
  color: #fff;
  border-radius: 0.5em;
}

.modal-body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: 10px 20px;
  background: #000;
}

.modal-footer {
  background: var(--modal-color);
  padding: 25px;
  color: #fff;
  border-radius: 0.5em;
}

.closeModal {
  position: absolute;
  top: 0;
  left: 0;
  margin: 20px;
  font-size: 50px;
  color: #fff;
  cursor: pointer;
}
    <div id="overview-grid" class="overview-grid">
      <div id="hover-box" class="hover-box"></div>
      <div id="my-modal-content" class="modal">
        <div class="modal-content">
          <div class="modal-header">
            <div id="closeContent" class="closeModal">&times;</div>
            <h2>Lorem</h2>
          </div>
          <div class="modal-body">
            <p>Lorem</p>
          </div>
          <div class="modal-footer">
          </div>
        </div>
      </div>
    </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...