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

如何实现滚动停止后重新显示隐藏的Header?代码优化需求

滚动隐藏Header + 停止滚动自动显示的实现方案

要在现有功能基础上添加「停止滚动指定时长后显示Header」的功能,核心思路是通过定时器监听滚动停止状态:每次滚动时重置定时器,当滚动停止且定时器触发时,自动切换Header为显示状态。

修改后的完整代码

// Hide Header on scroll down, show on scroll up or when stop scrolling
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('header').outerHeight();
// 设置停止滚动后显示Header的延迟时长(单位:毫秒)
var scrollDelay = 1000;
// 存储定时器ID,用于管理滚动停止计时
var scrollTimer;

$(window).scroll(function(event){
    didScroll = true;
    // 每次滚动时清除旧定时器,重新开始计时
    clearTimeout(scrollTimer);
    // 滚动停止达到指定时长后,自动显示Header
    scrollTimer = setTimeout(function() {
        $('header').removeClass('nav-up').addClass('nav-down');
    }, scrollDelay);
});

setInterval(function() {
    if (didScroll) {
        hasScrolled();
        didScroll = false;
    }
}, 50);

function hasScrolled() {
    var st = $(this).scrollTop();

    // 忽略小幅度滚动,避免频繁切换状态
    if(Math.abs(lastScrollTop - st) <= delta)
        return;

    // 向下滚动且超过Header高度时,隐藏Header
    if (st > lastScrollTop && st > navbarHeight){
        $('header').removeClass('nav-down').addClass('nav-up');
    } else {
        // 向上滚动时,立即显示Header
        if(st + $(window).height() < $(document).height()) {
            $('header').removeClass('nav-up').addClass('nav-down');
        }
    }

    lastScrollTop = st;
}

关键改动说明

  • 新增scrollDelay:可自定义停止滚动后显示Header的等待时长,示例设为1000毫秒(1秒),可根据需求调整
  • 新增scrollTimer:用于管理滚动停止的定时器,用户滚动过程中定时器会被不断重置,只有完全停止滚动且时长达标时才会触发显示逻辑
  • 滚动事件中补充定时器逻辑:与原有滚动方向判断逻辑互不冲突,向上滚动时仍会立即显示Header,停止滚动后则延迟显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:15