js点击弹出抽屉效果

2023-09-04
703次阅读
一条评论

可以一个页面多次重复使用的简单js弹窗效果,点击遮罩空白处或关闭按钮可以关闭弹窗,现在是从下往上弹出。稍微修改下css,其实上下左右可以

Html

<div class="open-btn" data-popup="popup1"></div>
<div class="open-btn" data-popup="popup2"></div>

<div class="popup-overlay" id="popup1">
    <div class="popup-content">
        <div class="flex justify-between align-center popup-head">
            <h2>标题</h2>
            <span class="iconfont close"></span>
        </div>
        <div class="popup-scroll">
            <div class="popup-box">
                内容
            </div>
        </div>
    </div>
</div>
<div class="popup-overlay" id="popup2">
    <div class="popup-content">
        <div class="flex justify-between align-center popup-head">
            <h2>标题</h2>
            <span class="iconfont close"></span>
        </div>
        <div class="popup-scroll">
            <div class="popup-box">
                内容
            </div>
        </div>
    </div>
</div>

Css

body.popup-open {
    overflow: hidden;
    -webkit-overflow-scrolling: touch;
}
.open-btn {
    cursor: pointer;
}
.popup-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.6);
    z-index: 99;
    transition: opacity 0.3s ease, transform 0.3s ease;
}

.popup-content {
    background-color: white;
    width: 7.5rem;
    margin: 0 auto;
    max-height: 60%;
    border-radius: .2rem .2rem 0 0;
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    opacity: 0;
    transform: translateY(100%);
    transition: opacity 0.3s ease, transform 0.3s ease;
    -webkit-transition: opacity 0.3s ease, transform 0.3s ease;
    overflow-y: auto;
}
.popup-content .popup-head {
    padding: .3rem;
    border-bottom: 1px solid #eeb27e;
}
.popup-content .popup-head h2 {
    font-size: .38rem;
    font-weight: bold;
    color: #f18f3a;
}
.popup-content .popup-head .close {
    cursor: pointer;
    color: #000;
    font-size: .4rem;
}
.popup-content .popup-scroll {
    padding: .3rem;
}
.popup-overlay.active .popup-content {
    opacity: 1;
    transform: translateY(0);
}

.popup-content .popup-box {
    color: #000;
    padding-bottom: .4rem;
}
.popup-content .popup-box h3 {
    font-size: .32rem;
    font-weight: bold;
    margin-bottom: .1rem;
}
.popup-content .popup-box p {
    line-height: 1.4;
    margin-bottom: .15rem;
}
.popup-content .popup-box .img a {
    display: inline-block;
}
.popup-content .popup-box img {
    border-radius: .1rem;
}

Js

const openButtons = document.querySelectorAll(".open-btn");
const closeButtons = document.querySelectorAll(".close");
const popupOverlays = document.querySelectorAll(".popup-overlay");
const body = document.body;

openButtons.forEach((button) => {
    button.addEventListener("click", () => {
        const popupId = button.getAttribute("data-popup");
        const popup = document.getElementById(popupId);
        popup.style.display = "flex";
        body.classList.add("popup-open");
        // 添加一个类以触发动画
        setTimeout(() => {
            popup.classList.add("active");
        }, 10);
    });
});

closeButtons.forEach((button) => {
    button.addEventListener("click", () => {
        const popup = button.closest(".popup-overlay");
        popup.classList.remove("active");
        // 等待动画完成后再隐藏弹出窗口
        setTimeout(() => {
            popup.style.display = "none";
            body.classList.remove("popup-open");
        }, 300);
    });
});

popupOverlays.forEach((popup) => {
    popup.addEventListener("click", (event) => {
        if (event.target === popup) {
            popup.classList.remove("active");
            // 等待动画完成后再隐藏弹出窗口
            setTimeout(() => {
                popup.style.display = "none";
                body.classList.remove("popup-open");
            }, 300);
        }
    });
});

正文完
要饭中,多少给点吧(支付宝)
post-qrcode
 
评论(一条评论)
验证码
2024-04-25 00:46:58 回复

Bwer Pipes: Your Reliable Partner for Irrigation Success in Iraq: Trust Bwer Pipes to provide you with dependable irrigation solutions tailored to the unique challenges of Iraqi farming. Our advanced sprinkler technology and durable pipes ensure optimal water distribution, resulting in healthier crops and higher yields. Explore Bwer Pipes

 Windows  Chrome  法国