滚动监听(Scrollspy)
滚动监听插件会根据滚动的位置,自动更新导航条的目标,以指示当前窗口中处于活动的状态(滚动在导航条下面的区域,查看active类的改变。弹出菜单的子项也同样会被高亮)。
运行原理
Scrollspy滑动监控组件正常运行的几个要点:
- 如果从源代码构建JS,请 包括
util.js。 - 它必须在Bootstrap nav 导航组年 或 list group列表组上使用。
- Scrollspy 需要在你监控的元素上使用
position: relative;,通常是<body>。 - 当需要对
<body>以外的元素进行监控时,请确保具有height高度值和overflow-y: scroll;属性。 - 锚点 (
<a>)是必须的,并且必须指向一个id上。
实施成功后,你的导航或列表群组将相应地更新,根据 .active 关联的目标,从一个项目移到另一个项目。
在navbar导航中的示例
滚动导航栏下方的区域,并观看活动列表的变化,下拉项目也会突出显示,如下例所示:

<nav id="navbar-example2" class="navbar navbar-light bg-light"><a class="navbar-brand" href="#">Navbar</a><ul class="nav nav-pills"><li class="nav-item"><a class="nav-link" href="#fat">@fat</a></li><li class="nav-item"><a class="nav-link" href="#mdo">@mdo</a></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a><div class="dropdown-menu"><a class="dropdown-item" href="#one">one</a><a class="dropdown-item" href="#two">two</a><div role="separator" class="dropdown-divider"></div><a class="dropdown-item" href="#three">three</a></div></li></ul></nav><div data-spy="scroll" data-target="#navbar-example2" data-offset="0"><h4 id="fat">@fat</h4><p>...</p><h4 id="mdo">@mdo</h4><p>...</p><h4 id="one">one</h4><p>...</p><h4 id="two">two</h4><p>...</p><h4 id="three">three</h4><p>...</p></div>
嵌套的导航示例
Scrollspy滚动监控也适用于嵌套的 .nav。如果是一个嵌套. .nav是的.active状态,其父母也将是.active状态。滚动导航栏旁边的区域,并观看活动班级更改,如下例:

<nav id="navbar-example3" class="navbar navbar-light bg-light"><a class="navbar-brand" href="#">Navbar</a><nav class="nav nav-pills flex-column"><a class="nav-link" href="#item-1">Item 1</a><nav class="nav nav-pills flex-column"><a class="nav-link ml-3 my-1" href="#item-1-1">Item 1-1</a><a class="nav-link ml-3 my-1" href="#item-1-2">Item 1-2</a></nav><a class="nav-link" href="#item-2">Item2</a><a class="nav-link" href="#item-3">Item3</a><nav class="nav nav-pills flex-column"><a class="nav-link ml-3 my-1" href="#item-3-1">Item 3-1</a><a class="nav-link ml-3 my-1" href="#item-3-2">Item 3-2</a></nav></nav></nav><div data-spy="scroll" data-target="#navbar-example3" data-offset="0"><h4 id="item-1">Item 1</h4><p>...</p><h5 id="item-1-1">Item 1-1</h5><p>...</p><h5 id="item-1-2">Item 2-2</h5><p>...</p><h4 id="item-2">Item 2</h4><p>...</p><h4 id="item-3">Item 3</h4><p>...</p><h5 id="item-3-1">Item 3-1</h5><p>...</p><h5 id="item-3-2">Item 3-2</h5><p>...</p></div>
列表组示例
Scrollspy 滚动监听也适用于 .list-group列表组,请滚动列表组旁边的区域,观看活动列表的变更:

<div id="list-example" class="list-group"><a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a><a class="list-group-item list-group-item-action" href="#list-item-2">Item2</a><a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a><a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a></div><div data-spy="scroll" data-target="#list-example" data-offset="0" class="scrollspy-example"><h4 id="list-item-1">Item 1</h4><p>...</p><h4 id="list-item-2">Item 2</h4><p>...</p><h4 id="list-item-3">Item 3</h4><p>...</p><h4 id="list-item-4">Item 4</h4><p>...</p></div>
用法
通过数据属性
要轻松添加滚动行为到您的顶栏导航,添加 data-spy="scroll"到您要窥探的元素(通常是<body>)。然后添加data-target属性到任何Bootstrap .nav组件的父元素ID或类的Class属性。
body {position: relative;}
<body data-spy="scroll" data-target="#navbar-example">...<div id="navbar-example"><ul class="nav nav-tabs" role="tablist">...</ul></div>...</body>
通过 JavaScript
在你的CSS加上 position: relative; ,通过JavaScript调用滚动监控:
$('body').scrollspy({ target: '#navbar-example' })
需要可分辨(明确)的ID目标
Navbar links must have resolvable id targets. For example, a <a href="#home">home</a> must correspond to something in the DOM like <div id="home"></div>.
忽略非:visible 目标元素
目标元素如果是非 :visible ,在jQuery中将被忽略,其它相对应的导航组永远不会被突出显示。
方法
.scrollspy('refresh')
当从DOM加入或删除元素使用滚动监控时,你需要调用刷新方式,如下所示:
$('[data-spy="scroll"]').each(function () {var $spy = $(this).scrollspy('refresh')})
.scrollspy('dispose')
销毁一个滚动元素。
选项
选项可以通过数据属性或JavaScript传递。对于数据属性,请将选项名称附加到 data-,如 data-offset=""。
| 名称 | Type类型 | 默认值 | 描述 |
|---|---|---|---|
| offset | number | 10 | 计算滚动位置时,从顶部开始的计算的像偏移距离。 |
事件
| Event事件类型 | 描述 |
|---|---|
| activate.bs.scrollspy | 每当新项目被滚动激活时,该事件就会在滚动元素上触发。 |
$('[data-spy="scroll"]').on('activate.bs.scrollspy', function () {// do something…})