You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击链接触发菜单弹窗的实现方案咨询

实现勾选菜单的弹窗效果(背景模糊+点击外部关闭)

没问题,我帮你调整了代码,完美实现你要的弹窗需求,具体修改如下:

核心思路

  • 把原菜单放到弹窗容器中,默认隐藏
  • 添加一个半透明遮罩层,实现背景模糊效果,默认隐藏
  • 通过JavaScript控制弹窗和遮罩的显示/隐藏,同时处理点击外部关闭的逻辑

修改后的完整代码

HTML 代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Menu List</title>
    <link rel="stylesheet" type="text/css" href="../CSS/checklist_menu_style.css">
</head>
<body>
    <!-- 首页触发链接 -->
    <a href="#" id="openMenuBtn">打开菜单</a>

    <!-- 遮罩层 -->
    <div class="overlay"></div>

    <!-- 弹窗容器 -->
    <div class="modal">
        <div class="modal-content">
            <!-- 关闭按钮 -->
            <button class="close-btn">&times;</button>
            <!-- 原菜单内容 -->
            <div class="menu">
                <h2>Our Menu</h2>
                <ul>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Fried Fish With Souce</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Fresh Traditional Cod And Chips</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Old Fashioned Rice Balls</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Italian Spaghetti</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Spinach Salad</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Spicy Egg Special</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Chicken Tikka</span>
                        </label>
                    </li>
                    <li>
                        <label>
                            <input type="checkbox" name="">
                            <span class="icon"></span>
                            <span class="list">Chocolate Chou With Strawberry</span>
                        </label>
                    </li>
                </ul>
            </div>
        </div>
    </div>

    <script src="../JS/menu-modal.js"></script>
</body>
</html>

CSS 代码(在原CSS基础上添加以下内容)

/* 首页触发链接样式(可根据你的首页样式调整) */
#openMenuBtn {
    font-size: 20px;
    color: #333;
    text-decoration: none;
    position: absolute;
    top: 20px;
    left: 20px;
    padding: 8px 16px;
    border: 1px solid #333;
    border-radius: 4px;
}

#openMenuBtn:hover {
    background: #333;
    color: #fff;
}

/* 遮罩层样式 */
.overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    backdrop-filter: blur(5px); /* 背景模糊效果 */
    display: none;
    z-index: 999;
}

/* 弹窗容器样式 */
.modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 1000;
    display: none;
}

/* 弹窗内容容器 */
.modal-content {
    background: #fff;
    width: 400px;
    max-width: 90%;
    position: relative;
    box-shadow: 0 0 20px rgba(0,0,0,0.3);
}

/* 关闭按钮样式 */
.close-btn {
    position: absolute;
    top: 10px;
    right: 15px;
    font-size: 24px;
    border: none;
    background: none;
    cursor: pointer;
    color: #666;
}

.close-btn:hover {
    color: #000;
}

/* 移除原body的flex布局,因为现在菜单在弹窗里 */
body {
    margin: 0;
    padding: 0;
    font-family: 'Poppins', sans-serif;
    min-height: 100vh;
    /* 移除原有的display: flex等居中样式 */
}

JavaScript 代码(单独创建menu-modal.js文件)

// 获取元素
const openBtn = document.getElementById('openMenuBtn');
const modal = document.querySelector('.modal');
const overlay = document.querySelector('.overlay');
const closeBtn = document.querySelector('.close-btn');

// 打开弹窗函数
function openModal() {
    modal.style.display = 'flex';
    overlay.style.display = 'block';
    // 禁止页面滚动
    document.body.style.overflow = 'hidden';
}

// 关闭弹窗函数
function closeModal() {
    modal.style.display = 'none';
    overlay.style.display = 'none';
    // 恢复页面滚动
    document.body.style.overflow = 'auto';
}

// 绑定打开事件
openBtn.addEventListener('click', function(e) {
    e.preventDefault(); // 阻止链接默认跳转
    openModal();
});

// 绑定关闭事件
closeBtn.addEventListener('click', closeModal);
overlay.addEventListener('click', closeModal);

// 点击ESC键关闭弹窗
document.addEventListener('keydown', function(e) {
    if (e.key === 'Escape') {
        closeModal();
    }
});

关键说明

  1. 背景模糊:通过backdrop-filter: blur(5px)实现,兼容现代浏览器
  2. 点击外部关闭:监听遮罩层的点击事件来触发关闭
  3. 页面滚动控制:弹窗打开时禁止页面滚动,提升体验
  4. ESC键关闭:额外添加了键盘快捷键,增强可用性

内容的提问来源于stack exchange,提问作者Jasper Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:52:54