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

覆盖层菜单打开时如何禁止顶部导航栏自动收缩

解决方案

你可以通过两层逻辑结合实现需求,从根源避免导航栏收缩触发:

  1. 给导航收缩逻辑增加开关判断
    修改原有的navbarCollapse函数,先判断覆盖层菜单是否处于激活状态,是则直接跳过收缩逻辑,和原有jQuery代码风格保持统一:
var navbarCollapse = function() {
    // 新增判断:菜单打开时直接终止执行
    if ($('.menu').hasClass('open')) {
        return;
    }
    if ($("#mainNav").offset().top > 100) {
        $("#mainNav").addClass("navbar-shrink");
    } else {
        $("#mainNav").removeClass("navbar-shrink");
    }
};
  1. 覆盖层打开时禁用页面滚动(推荐额外添加)
    在菜单开闭逻辑中新增body滚动控制,避免用户滚动背景页面,彻底消除滚动触发的导航栏状态变化,也更符合覆盖层菜单的通用交互习惯:
    修改openMenu函数如下:
function openMenu() {
    if (menu.classList.contains('open')) {
        menu.classList.add('close');
        iconMenu.classList.remove('icon-closed');
        // 关闭菜单时恢复页面滚动
        document.body.style.overflow = 'auto';
        // 关闭后主动触发一次导航收缩逻辑,复位导航栏状态
        navbarCollapse();
        
        setTimeout(function() {
            menu.classList.remove('open');
        }, 200);

    } else {
        menu.classList.remove('close');
        menu.classList.add('open');
        iconMenu.classList.add('icon-closed');
        iconMenu.classList.remove('.nav-link');
        // 打开菜单时禁用页面滚动
        document.body.style.overflow = 'hidden';
    }
};

补充说明

两种逻辑配合使用可完全解决问题:如果仅添加第一层判断,菜单打开时即使用户滚动页面,也不会触发导航栏收缩;加上第二层滚动禁用后,不会出现背景滚动、前景菜单不动的违和体验,交互更符合普通用户的使用习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:18:02