- 滚动监听(Scrollspy)
- 运行原理
- 在navbar导航中的示例
- 嵌套的导航示例
- 列表组示例
- 用法
- 通过数据属性
- 通过 JavaScript
- 需要可分辨(明确)的ID目标
- 忽略非:visible 目标元素
- 方法
- .scrollspy('refresh')
- .scrollspy('dispose')
- 选项
- 事件
滚动监听(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…
})