Напишите функцию, которая будет создавать модальные для вас. Сделайте так, чтобы эта функция принимала какой-либо ввод, например, содержимое модального окна, которое вы хотите показать. Затем добавьте модал на страницу. Таким образом, вы можете генерировать бесконечное количество различных модалов, основываясь на кнопке, на которую вы нажимаете.
Ниже приведен пример, который демонстрирует, как это может работать. Этот пример работает с созданием модального стиля, с той же структурой, что и в вашем примере, и с помощью атрибута value
кнопки задайте содержимое этого модального элемента. Для простого текста это работает нормально, но для больших кусков HTML вы можете рассмотреть возможность получения содержимого из скрытого элемента и скопировать значение innerHTML
этого элемента.
// Flag for checking if a modal is already opened.
// This way we can keep track of the opened modal and
// not open a second one before closing the first.
let modalOpen = false;
function createModal(html = '') {
// Create the elements.
const modal = document.createElement('div');
const content = document.createElement('div');
const close = document.createElement('span');
// Add classes to the elements.
modal.classList.add('modal');
content.classList.add('modal-content');
close.classList.add('close', 'js-close-modal');
// Add content to the elements.
content.insertAdjacentHTML('beforeend', html);
close.innerHTML = '×';
// Append children to parents and to the document.
content.appendChild(close);
modal.appendChild(content);
document.body.appendChild(modal);
return modal;
}
// Listen for clicks in the document.
document.addEventListener('click', event => {
// If the create modal button has been clicked, create a modal.
const button = event.target.closest('.js-create-modal');
if (button !== null && modalOpen === false) {
const html = button.value;
createModal(html);
modalOpen = true;
}
// If the close modal has been clicked, remove the modal.
const close = event.target.closest('.js-close-modal');
if (close !== null) {
const modal = close.closest('.modal');
modal.remove();
modalOpen = false;
}
});
*, *::before, *::after {
box-sizing: border-box;
}
.modal {
display: block;
position: fixed;
top: 50%;
left: 50%;
width: 100%;
height: 90%;
max-width: 32em;
max-height: 48em;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
padding: 15px;
transform: translate(-50%, -50%);
background: #ffffff;
border: 1px solid #d0d0d0;
border-radius: 5px;
z-index: 99;
}
.modal-content {
padding: 15px;
}
.close {
position: absolute;
top: 15px;
right: 15px;
cursor: pointer;
}
<button class="js-create-modal" value="This is my first modal.">Modal 1</button>
<button class="js-create-modal" value="All the modals have their own content.">Modal 2</button>
<button class="js-create-modal" value="And are unique in every way.">Modal 3</button>
Другим способом было бы иметь один модал на странице, который вы показываете и скрываете. Всякий раз, когда вы нажимаете кнопку, вы должны изменять содержимое модального режима в зависимости от кнопки, которую вы нажали. Таким образом, вам нужно изменить только один кусок. Но, эй, если модальный скрыт, почему бы просто не удалить его и построить новый, когда он вам нужен? Ваш выбор.