Modal 2

by marusti

HTML

<button class="open-modal" data-target="modal-1">OPEN MODAL WINDOW 1</button>
<button class="open-modal" data-target="modal-2">OPEN MODAL WINDOW 2</button>

<div id="modal-1" class="modal-window">
    <h2>Modal window 1</h2>
    <p>Proin rhoncus metus felis, ut tempor metus eleifend a. </p>
    <p>Nam porta, quam ut elementum sollicitudin, augue nibh ornare turpis.</p>
    <button class="modal-btn modal-hide">Close</button>
</div>

<div id="modal-2" class="modal-window">
    <h2>Modal window 2</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
    <p>Nulla egestas sed mi sed fringilla. Maecenas a finibus neque.</p>
    <button class="modal-btn modal-hide">Close</button>
</div>

<div class="modal-fader"></div>

CSS

.modal-fader {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    z-index: 99998;
    background: rgba(0,0,0,0.8);
}
.modal-fader.active {
    display: block;
}

.modal-window {
    display: none;
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    z-index: 99999;
    background: #fff;
    padding: 20px;
    border-radius: 5px;
    font-family: sans-serif;
    top: 50px;
}
.modal-window.active {
    display: block;
}
.modal-window h1,
.modal-window h2,
.modal-window h3,
.modal-window h4,
.modal-window h5,
.modal-window h6 {
    margin: 0;
}

.modal-btn {
    background: #36a5a5;
    border: none;
    color: #fff;
    padding: 10px 15px;
    box-shadow: none;
    border-radius: 3px;
    text-decoration: none;
}

JavaScript

(function () {
    document.querySelectorAll(".open-modal").forEach(function (trigger) {
        trigger.addEventListener("click", function () {
            hideAllModalWindows();
            showModalWindow(this);
        });
    });
    
    document.querySelectorAll(".modal-hide").forEach(function (closeBtn) {
        closeBtn.addEventListener("click", function () {
            hideAllModalWindows();
        });
    });
    
    document.querySelector(".modal-fader").addEventListener("click", function () {
        hideAllModalWindows();
    });
})();

function showModalWindow (buttonEl) {
    var modalTarget = "#" + buttonEl.getAttribute("data-target");
    
    document.querySelector(".modal-fader").className += " active";
    document.querySelector(modalTarget).className += " active";
}

function hideAllModalWindows () {
    var modalFader = document.querySelector(".modal-fader");
    var modalWindows = document.querySelectorAll(".modal-window");
    
    if(modalFader.className.indexOf("active") !== -1) {
        modalFader.className = modalFader.className.replace("active", "");
    }
    
    modalWindows.forEach(function (modalWindow) {
        if(modalWindow.className.indexOf("active") !== -1) {
            modalWindow.className = modalWindow.className.replace("active", "");
        }
    });
}