如何实现滚动停止后重新显示隐藏的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
相关产品推荐
相关产品推荐

