Я изо всех сил пытаюсь использовать код Javascript ниже. У меня есть 2 окна, каждое из которых должно открывать модальное окно, когда пользователь нажимает на него. В данный момент код работает только для одного ящика. Я не хочу копировать, вставлять все, потому что я хочу больше ящиков с теми же действиями. Очевидно, я не могу просто присвоить блокам один и тот же идентификатор (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">×</div>
<h2>Lorem</h2>
</div>
<div class="modal-body">
<p>Lorem</p>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>