Tutorial

Responsive Popup

Hier stelle ich ein responsives Popup mit jQuery und Javascript vor:

Das Script liest die folgenden Contentbereiche aus und zeigt sie im Popup.
Diese werden normalerweise ausgeblendet.

Hier die Demo:

POPUP1
POPUP2

Das HTML

Die Zuordnung von Popup-Link und Content-Boxen erfolgt über das Attribut data-popup

<span class="popup" data-popup="1">POPUP1</span> <span class="popup" data-popup="2">POPUP2</span>// Die Popup-Verlinkungen <div class="popup-content" data-popup="1"> // Die Contentelemente, die genommen werden <h2>POPUP EINS</h2> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. </div> <div class="popup-content" data-popup="2"> // Die Contentelemente, die genommen werden <h2>POPUP ZWEI</h2> sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, </div>
Select Code

CSS

.popup-content { display:none; } .popup { cursor:pointer; color:#f00; margin-left:0px; display:inline !important; font-weight: bold; } .p-wrap { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); background:#000; max-width:800px; width:calc(100% - 80px); z-index:1000; } .p-cont { color:#fff; padding:30px; text-align:justify; } .p-cont h2 { margin:0 0 0px 0; } .closer { position:absolute; border-radius:50%; width:40px; height:40px; background:#fff; border:4px solid #333; right: -20px; top: -20px; font-size: 44px; line-height: 0.6; text-align: center; cursor:pointer; } .p-inner::-webkit-scrollbar { width: 9px; } .p-inner::-webkit-scrollbar-track { background: #333; } .p-inner::-webkit-scrollbar-thumb { background: #666; } .p-inner { height: 100%; scrollbar-width: thin; scrollbar-color: #666 #333; }
Select Code

jQuery

(function ($) { const marginPercent = 10; $(".popup").on("click", function () { const popAttr = $(this).attr("data-popup"); const content = $('.popup-content[data-popup="' + popAttr + '"]').html(); if (!$(".p-wrap").length) { $("body").append('<div class="p-wrap"><div class="p-inner"><div class ="p-cont">' + content + '</div><div class="closer">×</div></div></div>'); $(".p-wrap").hide(); $(".p-wrap").fadeIn(300); setHeight(); } else { $(".p-cont").html(content); setHeight(); } }); function setHeight() { const winHeigth = $(window).outerHeight(); $(".p-wrap").css("height", ""); if ($(".p-wrap").outerHeight() + 2 * marginPercent / 100 * winHeigth > winHeigth) { $(".p-wrap").css("height", winHeigth - 2 * marginPercent / 100 * winHeigth); $(".p-inner").css("overflow-y", "scroll"); } else { $(".p-wrap").css("height", ""); $(".p-inner").css("overflow-y", ""); } } $(document).on('click', '.closer', function () { $(".p-wrap").fadeOut(300, function () { $(".p-wrap").remove(); }); }); $(window).resize(function () { if ($(".p-wrap").length > 0) { setHeight(); } }); })(jQuery);
Select Code

Javascript

Für Javascript füge folgendes CSS ein:

CSS

@keyframes fadein{ from {opacity: 0;} to {opacity: 1;} } .fade-in { animation-name: fadein; animation-duration: 0.4s; animation-fill-mode: forwards; } @keyframes fadeout{ from {opacity: 1;} to {opacity: 0;} } .fade-out { animation-name: fadeout; animation-duration: 0.4s; animation-fill-mode: forwards; }
Select Code

Javascript

const marginPercent = 10; const fadeSpeed = 400; var pWrap; var pInner; for (let el of document.querySelectorAll(".popup")) { el.addEventListener('click', function (event) { const popAttr = event.target.getAttribute("data-popup"); const content = document.querySelector('.popup-content[data-popup="' + popAttr + '"]').innerHTML; if (document.querySelector(".p-wrap") == undefined) { const cententWrap = document.createElement("div"); cententWrap.className = "p-wrap"; cententWrap.innerHTML = '<div class="p-inner"><div class ="p-cont">' + content + '</div><div class="closer">×</div></div>' document.querySelector("body").appendChild(cententWrap); pWrap = document.querySelector(".p-wrap"); pInner = document.querySelector(".p-inner"); setHeight(); pWrap.classList.add("fade-in"); document.querySelector(".closer").addEventListener('click', function () { pWrap.classList.add("fade-out"); setTimeout(function () { pWrap.remove() }, fadeSpeed); }); } else { document.querySelector(".p-cont").innerHTML = content; setHeight(); } }) } function setHeight() { const winHeigth = window.innerHeight; pWrap.style.height = ""; if (pWrap.offsetHeight + 2 * marginPercent / 100 * winHeigth > winHeigth) { pWrap.style.height = (winHeigth - 2 * marginPercent / 100 * winHeigth) + "px"; pInner.style.overflowY = "scroll"; } else { pWrap.style.height = ""; pInner.style.overflowY = ""; } } window.addEventListener("resize", (event) => { if (document.querySelector(".p-wrap") != undefined) { setHeight(); } });
Select Code