Bootstrap JS Scrollspy
JS Scrollspy (scrollspy.js)
Scrollspy 插件用于根据滚动位置自动更新导航列表中的链接。
有关 Scrollspy 的教程,请阅读我们的 Bootstrap Scrollspy 教程。
提示: Scrollspy 插件通常与 Affix 插件一起使用。
通过 data-* 属性
向应作为可滚动区域的元素添加 data-spy="scroll"
(通常是 <body>
元素)。
然后添加 data-target
属性,其值为导航栏的 id 或类名 (.navbar
)。这是为了确保导航栏与可滚动区域相连。
请注意,可滚动元素必须与导航栏列表项中链接的 ID 匹配 (<div id="section1">
与 <a href="#section1">
匹配)。
可选的 data-offset
属性指定在计算滚动位置时从顶部偏移的像素数。当您觉得导航栏内的链接在跳转到可滚动元素时,过早或过晚地更改活动状态时,此属性非常有用。默认值为 10 像素。
需要相对定位:具有 data-spy="scroll" 的元素需要 CSS position 属性,其值为 "relative" 才能正常工作。
示例
<!-- 可滚动区域 -->
<body data-spy="scroll" data-target=".navbar" data-offset="50">
<!-- 导航栏 - <a> 元素用于跳转到可滚动区域中的某个部分 -->
<nav class="navbar navbar-inverse navbar-fixed-top">
...
<ul class="nav navbar-nav">
<li><a href="#section1">部分 1</a></li>
...
</nav>
<!-- 部分 1 -->
<div id="section1">
<h1>部分 1</h1>
<p>尝试滚动此页面,并在滚动时查看导航栏!</p>
</div>
...
</body>
自己尝试 »
通过 JavaScript
使用以下方法手动启用
Scrollspy 选项
选项可以通过 data 属性或 JavaScript 传递。对于 data 属性,将选项名称附加到 data-,如 data-offset=""。
名称 | 类型 | 默认值 | 描述 | 尝试一下 |
---|---|---|---|---|
offset | 数字 | 10 | 指定在计算滚动位置时从顶部偏移的像素数 | 尝试一下 |
Scrollspy 方法
下表列出了所有可用的 scrollspy 方法。
方法 | 描述 | 尝试一下 |
---|---|---|
.scrollspy("refresh") | 在向 scrollspy 添加和删除元素时,可以使用此方法刷新文档 | 尝试一下 |
Scrollspy 事件
下表列出了所有可用的 scrollspy 事件。
事件 | 描述 | 尝试一下 |
---|---|---|
activate.bs.scrollspy | 当 scrollspy 激活新项目时发生 | 尝试一下 |
更多示例
带动画滚动的 Scrollspy
如何为同一页面上的锚点添加平滑页面滚动
平滑滚动
// 向 <body> 添加 scrollspy
$('body').scrollspy({target: ".navbar", offset: 50});
// 在导航栏内的所有链接上添加平滑滚动
$("#myNavbar a").on('click', function(event) {
// 确保 this.hash 具有值,然后再覆盖默认行为
if (this.hash !== "") {
// 阻止默认的锚点单击行为
event.preventDefault();
// 存储哈希值
var hash = this.hash;
// 使用 jQuery 的 animate() 方法添加平滑页面滚动
// 可选数字 (800) 指定滚动到指定区域所需的时间(以毫秒为单位)
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
// 完成滚动后向 URL 添加哈希值 (#)(默认单击行为)
window.location.hash = hash;
});
} // 结束 if
});
自己尝试 »
Scrollspy & Affix
将 Affix 插件与 Scrollspy 插件一起使用
水平菜单(导航栏)
<body data-spy="scroll" data-target=".navbar" data-offset="50">
<nav class="navbar navbar-inverse" data-spy="affix" data-offset-top="197">
...
</nav>
</body>
自己尝试 »
垂直菜单(侧边栏)
<body data-spy="scroll" data-target="#myScrollspy" data-offset="15">
<nav class="col-sm-3" id="myScrollspy">
<ul class="nav nav-pills nav-stacked" data-spy="affix" data-offset-top="205">
...
</nav>
</body>
自己尝试 »