# 滚动监听/Scrollspy
在滚动页面时,触发一些事件及动画。
## 用法
滚动监听组件监听页面滚动,并触发基于滚动位置的事件。例如,当你向下滚动页面时,你可以使首次出现在视窗中的一个元素触发一个平滑淡入的动画。只需添加带有以下选项的 `data-uk-scrollspy` 属性。
| Data 属性 | 描述 |
| --- | --- |
| `cls:'MY-CLASS'` | 只有元素首次出现在视窗时才应用这个属性中的class。 |
| `repeat: true` | 元素每次出现在视窗中时,都应用这个类。 |
| `delay:600` | 添加以毫秒为单位的动画延迟。 |
通常,[动画组件](animation.html)中的类与滚动监视一起搭配使用。
### 示例
下面的例字使用了`repeat: true` 选项。向上或向下滚动可以看到被触发的动画效果。
![](https://box.kancloud.cn/2016-05-12_57346f3a39a19.jpg)
### Markup
```
<div data-uk-scrollspy="{cls:'uk-animation-fade'}">...</div>
<div data-uk-scrollspy="{cls:'uk-animation-fade', repeat: true}">...</div>
<div data-uk-scrollspy="{cls:'uk-animation-fade', delay:900}">...</div>
```
* * *
## 组
你还可以将多个需要添加滚动监听效果的元素编成一组,这样就不必分别为每个元素添加 data 属性了。只需要添加 `data-uk-scollspy"{target:'MY-CLASS'}"` 属性到容器元素,将 target 选项指向容器中你想要添加动画效果的条目。当使用 delay(延时)时,将会为进入视野的一行条目添加逐次显现的效果。这个延时效果会为同一组内的下一行元素滚动进入视野时重置。
### Example
![](https://box.kancloud.cn/2016-05-12_57346f3a58796.jpg)
### Example
```
<div data-uk-scrollspy="{cls:'uk-animation-fade', target:'.my-class', delay:300}">
<!-- 无延时 -->
<div class="my-class">...</div>
<!-- 300ms 延时 -->
<div class="my-class">...</div>
<!-- 600ms 延时 -->
<div class="my-class">...</div>
</div>
```
* * *
## JavaScript选项
这是一个如何通过属性设置选项的示例:
```
data-uk-scrollspy="{cls:'uk-animation-fade'}"
```
| 选项 | 可用的值 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `cls` | string | 'uk-scrollspy-inview' | 当元素出现在视口内时添加的类。 |
| `initcls` | string | 'uk-scrollspy-init-inview' | 当元素首次出现在视口内时添加的类。 |
| `topoffset` | integer | 0 | 在视口中触发事件前的顶部偏移量。 |
| `leftoffset` | integer | 0 | 在视口中触发事件前的左部偏移量。 |
| `repeat` | boolean | false | 元素是否每次出现在视口中都应用 `cls` 中提到的类。 |
| `delay` | integer | 0 | 以毫秒为单位的延时。 |
### 事件
你可以为以下事件绑定回调函数,以实现自定义功能:
| 名称 | 描述 |
| --- | --- |
| `uk.scrollspy.init` | 当元素开始进入视口时触发。 |
| `uk.scrollspy.inview` | 当元素在视口中时触发。 |
| `uk.scrollspy.outview` | 当元素离开视口时触发。 |
### 示例
```
$('[data-uk-scrollspy]').on('uk.scrollspy.inview', function(){
// custom code...
});
```
* * *
## 滚动监听导航/Scrollspy Nav
根据你网站滚动条的位置来自动更新所对应的导航状态,只需添加Data属性 `data-uk-scrollspy-nav` 到任意导航栏中。每个菜单项必须链接至网站中网站中对应的具有相同ID的部分。
| Data属性 | 描述 |
| --- | --- |
| `data-uk-scrollspy-nav` | 触发滚动监听导航的功能必须的JavaScript。 |
| `data-uk-scrollspy-nav="{closest:'MY-SELECTOR'}"` | 通过遍历查找此DOM树中最接近的节点元素进行匹配。 |
| `data-uk-scrollspy-nav="{smoothscroll:true}"` | 在网页的不同部分之间跳转时,应用[平滑滚动组件](smooth-scroll.html)。 |
| `data-uk-scrollspy-nav="{cls:'MY-CLASS'}"` | 默认地,滚动监听导航会拨动 `uk-active` 类。使用 `cls` 选项使用你自己的类名。 |
对于滚动监听的例子,可以查看[滚动监听测试页面](../tests/core/scrollspy.html)。
### Code
```
<ul class="uk-nav uk-nav-side" data-uk-scrollspy-nav="{closest:'li', smoothscroll:true}">
<li><a href="#MY-ID">...</a></li>
<li><a href="#MY-ID2">...</a></li>
</ul>
<div id="MY-ID">...</div>
<div id="MY-ID2">...</div>
```
* * *
### JavaScript选项
这是一个如何通过属性设置选项的示例:
```
data-uk-scrollspy-nav="{smoothscroll:true}"
```
| 选项 | 可用的值 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `cls` | string | 'uk-active' | 添加其中的class以激活元素。 |
| `closest` | CSS 选择器 | false | 将上面所述的类,应用到本选择器对应的元素中。 |
| `topoffset` | integer | 0 | 滚动的顶部偏移量。 |
| `leftoffset` | integer | 0 | 滚动的左部偏移量。 |
| `smoothscroll` | boolean | false | 是否显示平滑的滚动动画效果。 |
### 事件
| 名称 | 参数 | 描述 |
| --- | --- | --- |
| `init.uk.scrollspy` | event | 滚动监听第一次初始化时触发 |
| `inview.uk.scrollspy` | event | 元素进入视口后触发 |
| `outview.uk.scrollspy` | event | 元素离开视口后触发 |
- UIkit 中文文档
- 开始使用
- 初学者
- 开始使用
- 如何自定义
- 布局示例
- 开发者
- 项目结构
- Less & Sass 文件
- 创建主题
- 创建样式
- Customizer.json
- JavaScript
- 自定义前缀
- 核心组件
- 默认
- 基础
- 打印
- 布局类组件
- 网格
- 面板/Panel
- 块/Block
- 文章
- 评论/Comment
- 效果/Utility
- Flex 布局
- 覆盖/Cover
- 导航类组件
- 导航菜单
- 导航栏
- 二级导航
- 面包屑/Breadcrumb
- 分页
- 选项卡
- 缩略图导航/Thumbnav
- 页面元素
- 列表
- 描述列表
- 表格
- 表单
- 常用组件
- 按钮
- 图标
- 关闭/Close
- 徽章/Badge
- 提示框
- 缩略图/Thumbnail
- 遮罩/Overlay
- 文本
- 列
- 动画
- 对比度/Contrast
- JAVASCRIPT组件
- 下拉菜单
- 模态对话框
- 抽屉/Off-canvas
- 切换器/Switcher
- 拨动/toggle
- 滚动监听/Scrollspy
- 平滑滚动
- 附加组件
- 布局类组件
- 动态网格
- 视差网格
- 导航类组件
- 圆点导航
- 滑动导航/Slidenav
- 动态分页
- 常用组件
- 高级表单
- 文件表单/Form file
- 密码表单
- 选择表单
- 占位符
- 进度条/Progress
- JAVASCRIPT组件
- 灯箱/Lightbox
- 自动完成/Autocomplete
- 日期选择器/Datepicker
- HTML 编辑器
- 滚动条/Slider
- 滑块集/Slideset
- 幻灯片/Slideshow
- 视差/Parallax
- 手风琴/Accordion
- 通知/Notify
- 搜索/Search
- 可嵌套/Nestable
- 可排序/Sortable
- 附着/Sticky
- 时间选择器
- 工具提示/Tooltip
- 上传