У меня возникла проблема, даже не знаю как ее описать, но попробую.
При моих скудных (умственных) способностях, был написан сайт, в котором присутствует один попап, который я сделал в виде отдельного файла html, так как у меня несколько страничный сайт. Такой вариант, как мне кажется, является оптимальным, чтобы не вписывать попап в каждую страницу.
Данный попап является окном регистрации. я еле как разобрался как его вообще реализовать (через тег Iframe).
Ну и можно подумать: "Так в чем проблема, тупой школьник во всем разобрался, молодец". А вот проблема заключается в том, что я не понимаю как этот "попыт" закрывать.
У меня присутствует 2 css файла. Один для всего, а второй как раз для окна регистрации.
Вот так выглядит код для iframe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
.regwin{ border: 0; outline: 0; height: 100%; width: 100%; position: absolute; z-index: 5; opacity: 0; visibility: hidden; } .regwin:target{ opacity: 1; visibility: visible; } |
То есть, при ссылке сайт становиться видимым и осезаемым для пользователя.
Как теперь вернуть opacity и visibility к предыдущим значениям, при условии того, что нажатие происходит на новом сайте.
Можете подсказать, что делать или как можно упростить?😅
@NesTraGon Вы можете добавить кнопку "Закрыть" внутри самого попапа. Вот как это можно сделать:
1 2 3 |
<iframe class="regwin" id="registrationPopup" src="ссылка_на_содержимое_попапа.html"> <button id="closePopup">Закрыть</button> </iframe> |
Чтобы добавить функциональность закрытия попапа при нажатии на кнопку "Закрыть". Добавьте JavaScript код в ваш файл:
1 2 3 4 5 6 7 8 9 |
document.addEventListener("DOMContentLoaded", function () { const closePopupButton = document.getElementById("closePopup"); const registrationPopup = document.getElementById("registrationPopup"); closePopupButton.addEventListener("click", function () { registrationPopup.style.opacity = 0; registrationPopup.style.visibility = "hidden"; }); }); |
@NesTraGon
Ваше предложение использовать JavaScript для управления pop-up окном — это действительно хороший способ, особенно когда iframe задействован. Однако ваш пример следует немного доработать. Напомню, что кнопка закрытия должна находиться в том же DOM-дереве, что и сам код, управляющий pop-up окном. Поскольку iframe создает отдельный контекст, внутри него будут свои DOM-элементы, не соприкасающиеся с "родительским" документом.
Вот правильный подход:
1
|
<iframe class="regwin" id="registrationPopup" src="ссылка_на_попап_содержимое.html"></iframe> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Регистрация</title>
</head>
<body>
<div>
<!-- Ваше содержимое регистрации -->
<button id="closePopup">Закрыть</button>
</div>
<script>
document.getElementById('closePopup').addEventListener('click', function() {
// Отправка сообщения для родителя
window.parent.postMessage('closePopup', '*');
});
</script>
</body>
</html>
|
1 2 3 4 5 6 7 8 9 10 11 |
document.addEventListener("DOMContentLoaded", function () {
const registrationPopup = document.getElementById("registrationPopup");
// Прослушивание сообщений от iframe
window.addEventListener("message", function(event) {
if (event.data === 'closePopup') {
registrationPopup.style.opacity = 0;
registrationPopup.style.visibility = "hidden";
}
});
});
|
Этот метод учитывает взаимодействие между разными контекстами (основной документ и отдельно загруженный контент через iframe) посредством API сообщений. Надеюсь, это вам поможет!