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

如何在全屏菜单激活时禁用粘性导航的JavaScript函数

问题解决:全屏菜单激活时禁用粘性导航

你的问题核心是汉堡菜单切换时,没有给.menu-overlay添加/移除active类,导致你在粘性导航里加的判断条件永远不成立,所以禁用逻辑没生效。另外,全屏菜单打开时页面仍可滚动的问题也需要同步处理,避免滚动触发粘性导航同时影响菜单体验。


1. 修复汉堡菜单的active类切换逻辑

修改汉堡菜单的JS代码,在切换菜单显示状态的同时,给.menu-overlay同步添加/移除active类,同时控制页面滚动:

(function() {
    'use strict';
    $('.hamburger-menu').click(function (e) {
        e.preventDefault();
        const isActive = $(this).hasClass('active');
        // 切换汉堡按钮状态
        $(this).toggleClass('active');
        // 切换菜单遮罩的显示状态与active类
        $('.menu-overlay').fadeToggle('fast', 'linear').toggleClass('active');
        $('.menu .menu-list').fadeToggle('fast', 'linear');
        
        // 菜单打开时禁止页面滚动,关闭时恢复
        $('body').toggleClass('no-scroll', !isActive);
    })
})();

2. 保留粘性导航的判断逻辑(现在会正常生效)

你原本写的粘性导航判断逻辑本身是正确的,现在因为.menu-overlay能正确获取active类,判断会正常触发,直接保留即可:

const body = document.body;
let lastScroll = 0;

window.addEventListener("scroll", () => {
    const currentScroll = window.pageYOffset;

    // 全屏菜单激活时,直接退出函数,不执行粘性导航逻辑
    if ($('.menu-overlay').hasClass('active')) {
        return;
    }

    if (currentScroll <= 0) {
        body.classList.remove("scroll-up");
    }

    if (currentScroll > lastScroll && !body.classList.contains("scroll-down")) {
        body.classList.remove("scroll-up");
        body.classList.add("scroll-down");
    }
    if (currentScroll < lastScroll && body.classList.contains("scroll-down")) {
        body.classList.remove("scroll-down");
        body.classList.add("scroll-up");
    }
    lastScroll = currentScroll;
});

3. 添加CSS实现页面滚动禁用(可选但推荐)

为了提升全屏菜单的体验,给no-scroll类添加CSS样式,彻底禁止页面滚动:

body.no-scroll {
    overflow: hidden;
    position: fixed;
    width: 100%;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:41