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

如何实现向下滚动页面时切换Bootstrap导航栏菜单的显示状态

问题原因

  • 显示隐藏逻辑倒置:滚动超过阈值时的操作和需求完全相反
  • 类操作逻辑错误:未正确使用Bootstrap的d-none/d-block类实现显示隐藏
  • 代码冗余:重复定义了两次滚动事件和滚动处理函数
  • 缺少DOM加载判断:如果JS代码放在页面头部,会出现DOM未加载完成就获取元素导致的报错

修复方案

1. 调整JS逻辑

以下代码支持两种触发逻辑:你可以选择固定滚动距离触发,也可以选择滚动超过某一指定div触发,按需选择即可,替换你现有全部JS代码:

document.addEventListener('DOMContentLoaded', function() {
    const mainMenu = document.getElementById('main-menu');
    const scrollMenu = document.getElementById('scroll-menu');
    let scrollThreshold = 700; // 固定700px滚动距离触发的话保留这行即可

    // --- 如果要滚动超过某一div触发,替换上面的scrollThreshold赋值即可,示例如下 ---
    // const targetDiv = document.getElementById('你要判定的div的id');
    // scrollThreshold = targetDiv.offsetTop + targetDiv.offsetHeight;
    // -------------------------------------------------------------------------

    function scrollFunction() {
        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        if (scrollTop > scrollThreshold) {
            // 滚动超过阈值:隐藏主菜单,显示滚动菜单
            mainMenu.classList.add('d-none');
            mainMenu.classList.remove('d-block');
            scrollMenu.classList.remove('d-none');
            scrollMenu.classList.add('d-block');
        } else {
            // 未超过阈值:显示主菜单,隐藏滚动菜单
            mainMenu.classList.remove('d-none');
            mainMenu.classList.add('d-block');
            scrollMenu.classList.add('d-none');
            scrollMenu.classList.remove('d-block');
        }
    }
    window.onscroll = scrollFunction;
    // 页面加载时先执行一次,适配刷新后滚动条不在顶部的场景
    scrollFunction();
})

2. 可选HTML优化

如果需要避免导航切换时页面内容跳动,给#main-menu也加上fixed-top类,同时给body设置padding-top,数值等于主菜单的高度,避免页面顶部内容被固定导航遮挡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:27:05