上一篇
headroom.js例子
- 行业动态
- 2025-05-08
- 3820
“`html,,, new Headroom(document.querySelector(“.header”), {, tolerance: 5, // 触发距离, offset: 205 // 偏移量, }).init
Headroom.js 实现页面顶部栏滚动隐藏与显示的完整示例
Headroom.js 基础概念
Headroom.js 是一个轻量级 JavaScript 库,用于在用户滚动页面时自动隐藏或显示固定的顶部栏(如导航栏),从而提升移动端用户体验,其核心原理是通过监听滚动事件,判断用户滚动方向并触发对应的显示/隐藏逻辑。
实现步骤与代码示例
安装与引入
通过 CDN 引入
<!-引入 Headroom.js 和配套样式 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/headroom@1.0.3/dist/headroom.css"> <script src="https://cdn.jsdelivr.net/npm/headroom@1.0.3/dist/headroom.js"></script>
通过 npm 安装
npm install headroom --save
HTML 结构
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8">Headroom.js 示例</title> <link rel="stylesheet" href="path/to/headroom.css"> <style> / 自定义顶部栏样式 / .header { background: #007bff; color: white; padding: 15px; text-align: center; position: fixed; / 固定定位 / top: 0; left: 0; width: 100%; z-index: 100; / 确保层级高于内容 / } / 内容区域样式 / .content { padding-top: 60px; / 预留顶部栏高度 / margin: 0 auto; max-width: 800px; } </style> </head> <body> <div class="header">固定顶部栏(导航栏)</div> <div class="content"> <p>向下滚动查看顶部栏隐藏效果 →</p> <!-模拟长内容 --> <div style="height: 2000px; background: #f5f5f5;"> <h2>内容区域</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </div> </div> <script src="path/to/headroom.js"></script> <script> // 初始化 Headroom const header = document.querySelector('.header'); const headroom = new Headroom(header, { // 配置选项(可选) "offset": 50, // 顶部栏距离视口顶部的偏移量(像素) "tolerance": 5, // 滚动判定的容差值(像素) "classes": { // 自定义 CSS 类名 "initial": "headroom--initial", "pinned": "headroom--pinned", "unpinned": "headroom--unpinned" } }); headroom.init(); </script> </body> </html>
关键配置参数说明
参数名 | 类型 | 默认值 | 作用描述 |
---|---|---|---|
offset | Number | 0 | 顶部栏与视口顶部的距离阈值,达到此值时触发隐藏 |
tolerance | Number | 0 | 滚动判定的缓冲范围(防止频繁触发) |
classes | Object | 自定义添加/移除的 CSS 类名(用于样式控制) | |
onPin | Function | 顶部栏固定时的回调函数 | |
onUnpin | Function | 顶部栏隐藏时的回调函数 |
动态效果演示
假设页面初始状态如下:
- 未滚动时:顶部栏固定显示。
- 向下滚动超过
offset
:顶部栏隐藏。 - 向上滚动超过
tolerance
:顶部栏重新显示。
代码逻辑流程图
| 用户操作 | 触发条件 | 顶部栏状态 |
|——————-|————————-|————|
| 向下滚动 | scrollY > offset
| 隐藏 |
| 向上滚动 | scrollY < offset
| 显示 |
| 快速滑动 | scrollY
变化 < tolerance
| 保持原状态 |
进阶功能扩展
手动控制显示/隐藏
// 绑定按钮点击事件 document.getElementById('toggle-header').addEventListener('click', () => { headroom.lastKnownScrollY = 0; // 重置滚动位置 headroom.debouncer({ scroll: { y: 0 } }); // 强制触发显示逻辑 });
兼容动态加载(如无限滚动)时,需手动调用 headroom.updateScroller()
更新滚动容器。
常见问题与解决方案
FAQs
问题 1:顶部栏初始状态未隐藏,如何设置默认隐藏?
解答:通过调整 offset
参数或添加自定义 CSS 类控制。
new Headroom(header, { offset: -1 }); // 负值使初始状态隐藏
或直接在 CSS 中设置:
.header { display: none; / 默认隐藏 / } .headroom--pinned .header { display: block; / 仅在 pinned 状态显示 / }
问题 2:滚动时顶部栏抖动(频繁显隐)怎么办?
解答:增大 tolerance
值以减少敏感度。
new Headroom(header, { tolerance: 10 }); // 扩大缓冲范围
或优化 offset
值,确保与顶部栏高度匹配。
完整代码整合(带注释)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8">Headroom.js 完整示例</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/headroom@1.0.3/dist/headroom.css"> <style> .header { background: #343a40; color: #fff; padding: 15px; position: fixed; top: 0; left: 0; width: 100%; z-index: 1000; transition: transform 0.3s ease; / 添加过渡动画 / } .content { padding-top: 60px; / 匹配顶部栏高度 / padding-bottom: 50px; } / 自定义隐藏时的样式 / .headroom--unpinned .header { transform: translateY(-100%); / 完全隐藏 / } </style> </head> <body> <div class="header">我的网站导航栏</div> <div class="content"> <h1>Headroom.js 实战教程</h1> <p>向下滚动查看顶部栏隐藏效果 →</p> <div style="height: 3000px; background: #eee;"> <h2>模拟长内容</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p> </div> </div> <script src="https://cdn.jsdelivr.net/npm/headroom@1.0.3/dist/headroom.js"></script> <script> // 选择顶部栏元素 const header = document.querySelector('.header'); // 初始化 Headroom(带配置) const headroom = new Headroom(header, { offset: 80, // 滚动超过80px时隐藏 tolerance: 15, // 滚动判定缓冲15px classes: { // 自定义类名(可选) initial: 'headroom-initial', pinned: 'headroom-pinned', unpinned: 'headroom-unpinned' } }); // 启动 Headroom headroom.init(); </script>