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

如何实现点击按钮打开侧边菜单时其余页面变暗且不可访问?

YouTube风格侧边菜单交互实现方案

核心实现逻辑是在页面中新增遮罩层元素,配合侧边栏的展开/收起状态同步控制遮罩的显隐,既实现页面其余区域变暗的视觉效果,也能直接拦截非菜单区域的所有用户交互。


具体修改步骤

  • 新增遮罩层DOM节点:将<div class="menu-backdrop"></div>放在侧边菜单.linkList的同级位置,作为菜单容器的直接子元素即可
  • 补充样式规则:给遮罩层加全屏固定定位、半透明黑色背景,设置合适的层级保证它在普通页面内容之上、侧边菜单之下;同时给侧边菜单提高层级,保证菜单内的链接可正常点击
  • 调整交互逻辑:点击菜单按钮展开侧边栏时同步显示遮罩,点击按钮收起、点击遮罩、按下ESC键时同步隐藏遮罩、收回菜单
  • 修复原有代码的语法问题:删除重复的<body>标签,把lang属性统一放到正确的body标签上

关键代码参考

核心CSS样式

/* 遮罩层样式 */
.menu-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background-color: rgba(0, 0, 0, 0.6);
    z-index: 99;
    display: none;
}
/* 给侧边栏提层级,保证在遮罩上方可交互 */
.linkList {
    z-index: 100;
    /* 保留你原有的position、width、transition等其他样式即可 */
}

交互JS逻辑

const menuBtn = document.querySelector('.menuButton');
const sideMenu = document.querySelector('.linkList');
const menuBackdrop = document.querySelector('.menu-backdrop');

// 菜单状态切换方法
const switchMenu = (isOpen) => {
    if (isOpen) {
        sideMenu.style.right = '0px';
        menuBackdrop.style.display = 'block';
        // 可选:菜单展开时禁止页面滚动
        document.body.style.overflow = 'hidden';
    } else {
        sideMenu.style.right = '-150px';
        menuBackdrop.style.display = 'none';
        document.body.style.overflow = 'auto';
    }
}

// 菜单按钮点击事件
menuBtn.addEventListener('click', (e) => {
    e.stopPropagation();
    const currentState = sideMenu.style.right !== '0px';
    switchMenu(currentState);
});

// 点击遮罩关闭菜单
menuBackdrop.addEventListener('click', () => {
    switchMenu(false);
});

// 按下ESC键关闭菜单(可选优化,符合通用交互习惯)
document.addEventListener('keydown', (e) => {
    if (e.key === 'Escape' && sideMenu.style.right === '0px') {
        switchMenu(false);
    }
});

效果说明

  • 菜单展开时,遮罩层会覆盖除侧边栏外的所有页面区域,半透明黑色实现压暗效果
  • 遮罩层会拦截所有鼠标点击、hover、键盘焦点事件,下方的链接、按钮完全无法被用户操作,直到菜单收回
  • 额外加的禁止页面滚动、ESC关闭菜单逻辑和YouTube原生交互完全一致,使用体验更流畅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:24:22