介绍
可见性提供了一组回调函数,可以附加到任何元素,并在发生特定可见性事件时触发。
将事件附加到可见性有多种用途。以下是一些更常见的用途。
使用
使用方法
可见性提供了一组回调函数,可用于将事件附加到元素在屏幕上的位置。
每次滚动更改都会触发一个动画帧请求,该请求将为元素触发回调函数。
// 一些示例回调 $('.demo.segment') .visibility({ onTopVisible: function(calculations) { // 顶部在屏幕上 }, onTopPassed: function(calculations) { // 元素顶部已通过 }, onUpdate: function(calculations) { // 只要计算调整就执行某些操作 updateTable(calculations); } }) ;














计算 | 值 |
---|---|
pixelsPassed | 0px |
percentagePassed | 0% |
fits | false |
width | 1264px |
height | 280px |
onScreen | |
offScreen | |
passing | |
topVisible | false |
bottomVisible | false |
topPassed | false |
bottomPassed | false |
更改回调频率
可见性的默认设置只会让每个回调函数在满足条件的第一次时发生。在随后的情况下,事件不会触发。
设置 continuous: true
将使回调函数在满足回调条件的任何时候触发。例如,如果您设置了一个“顶部可见”回调函数,则此回调函数将在每次滚动更改时触发,只要顶部在页面上可见。
设置 once: false
将使回调函数在每次回调变为真时触发。因此,使用相同的“顶部可见”示例,只要元素的顶部通过,回调函数就会触发。即使您向上滚动并再次通过元素也是如此。














回调
回调函数分为两类。标准事件将在条件计算为真的第一个动画帧中发生。
标准事件
事件 | 发生 | 伪代码 |
---|---|---|
onOnScreen | 元素的任何部分都在当前滚动视窗中 |
|
onOffScreen | 元素的任何部分都不在当前滚动视窗中 |
|
onTopVisible | 元素的顶边已超过屏幕底部 |
|
onTopPassed | 元素的顶边已超过屏幕顶部 |
|
onBottomVisible | 元素的底边已超过屏幕底部 |
|
onPassing | 元素的任何部分都在屏幕上可见 |
|
onBottomPassed | 元素的底边已超过屏幕顶部 |
|
分组事件
onPassed
允许您指定一组回调函数,这些回调函数在元素通过不同百分比或像素后发生。
事件 | 发生 | 示例 |
---|---|---|
onPassed {} | 已通过元素内容顶部的距离,以百分比或像素表示。 |
|
反向事件
反向事件将在相同条件下发生,但当用户向上滚动页面时发生。
事件 | 发生 | 伪代码 |
---|---|---|
onTopVisibleReverse | 元素的顶边未超过屏幕底部 |
|
onTopPassedReverse | 元素的顶边未超过屏幕顶部 |
|
onBottomVisibleReverse | 元素的底边未超过屏幕底部 |
|
onPassingReverse | 元素的顶部未超过屏幕顶部,但底部已超过 |
|
onBottomPassedReverse | 元素的底边未超过屏幕顶部 |
|
行为
可见性包含一些用于与组件交互的有用行为。
行为 | 使用 |
---|---|
禁用回调函数 | 暂时禁用回调函数。如果您需要调整滚动位置,并且不想在位置更改期间触发回调函数,这很有用。 |
启用回调函数 | 重新启用回调函数 |
是否在屏幕上 | 返回元素是否在屏幕上 |
是否不在屏幕上 | 返回元素是否不在屏幕上 |
获取已通过的像素 | 返回从元素顶部开始,当前元素已通过的像素数。 |
获取元素计算 | 将元素计算作为对象返回。 |
获取屏幕计算 | 将屏幕计算作为对象返回。 |
获取屏幕大小 | 将屏幕大小作为对象返回。 |
示例
无限滚动
作为分页的替代方法,您可以使用 onBottomVisible
在容器底部到达时自动加载内容。
无限滚动示例




延迟加载图片
可见性包含一些用于设置常见可见性事件的快捷方式。使用设置 type: 'image'
将自动将事件附加到图片的 topVisible
,以将 data-src
的内容作为 src
加载。
您可以将占位符图片指定为当前 src
,以确保图片加载时内容不会跳动,或者您可以不指定占位符,让图片出现。
默认情况下,图片将没有任何动画出现,但是您也可以指定命名的 过渡 和用于对图片进行动画到视图的持续时间。

Elliot Fu


Helen Troy


Jenny Hess


Veronika Ossi


Stevie


Steve Jobes


Ade


Chris


Joe Henderson


Laura

<div class="ui divided demo items">
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/elliot.jpg">
</div>
<div class="content">
<h2 class="ui header">Elliot Fu</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/helen.jpg">
</div>
<div class="content">
<h2 class="ui header">Helen Troy</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/jenny.jpg">
</div>
<div class="content">
<h2 class="ui header">Jenny Hess</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/veronika.jpg">
</div>
<div class="content">
<h2 class="ui header">Veronika Ossi</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/stevie.jpg">
</div>
<div class="content">
<h2 class="ui header">Stevie</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/steve.jpg">
</div>
<div class="content">
<h2 class="ui header">Steve Jobes</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/ade.jpg">
</div>
<div class="content">
<h2 class="ui header">Ade</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/chris.jpg">
</div>
<div class="content">
<h2 class="ui header">Chris</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/joe.jpg">
</div>
<div class="content">
<h2 class="ui header">Joe Henderson</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
<div class="item">
<div class="image">
<img src="/images/wireframe/square-image.png" data-src="/images/avatar/large/laura.jpg">
</div>
<div class="content">
<h2 class="ui header">Laura</h2>
<p></p>
<div class="ui primary button">添加好友</div>
<div class="ui right floated button">查看 <i class="right chevron icon"></i></div>
</div>
</div>
</div>
设置
功能配置 visibility 行为的设置
设置 | 默认值 | 描述 |
---|---|---|
once | true | 当设置为 false 时,回调函数会在元素每次通过条件的阈值时发生。 |
continuous | false | 当设置为 true 时,回调函数会在元素每次通过条件时发生,而不仅仅是在满足阈值后立即发生。 |
type | false | 设置为 image 以在屏幕上加载图像。设置为 fixed 以在元素通过时添加 fixed 类名。 |
initialCheck | true | 是否应在初始化时立即检查 visibility 条件。 |
context | window | visibility 应该使用的滚动上下文。 |
refreshOnLoad | true | 是否应在窗口 load 时检查 visibility 条件。这确保在图像加载后,内容位置将被正确更新。 |
refreshOnResize | true | 是否应在窗口 resize 时检查 visibility 条件。当内容大小调整导致位置发生持续变化时很有用。 |
checkOnRefresh | true | 是否应在调用 refresh 时检查 visibility 条件。这些调用可以从 resize 、load 或手动调用 $('.foo').visibility('refresh') 中触发。 |
zIndex | 1 | 使用 type: 'fixed' 时指定 z-index。2.2 中的新功能 |
offset | 0 | 上下文 scrollTop 应该以像素调整的值。有助于使内容出现在固定到页面的内容下方。 |
includeMargin | false | 元素计算是否应包含其边距。 |
throttle | false | 当设置为整数时,滚动位置将使用此 ms 值进行去抖动。false 将使用 requestAnimationFrame 进行去抖动。 |
observeChanges | true | 是否在元素的 DOM 子树发生变化时自动刷新内容。 |
transition | false | 当使用 type: image 时,允许您指定显示已加载图像时的过渡。 |
duration | 1000 | 当使用 type: image 时,允许您指定过渡持续时间。 |
Visibility 回调函数
在命名 visibility 事件上发生的回调函数
上下文 | 描述 | |
---|---|---|
onTopVisible | $element | 元素的顶边已超过屏幕底部 |
onTopPassed | $element | 元素的顶边已超过屏幕顶部 |
onBottomVisible | $element | 元素的底边已超过屏幕底部 |
onPassing | $element | 元素的任何部分都在屏幕上可见 |
onBottomPassed | $element | 元素的底边已超过屏幕顶部 |
onTopVisibleReverse | $element | 元素的顶边未超过屏幕底部 |
onTopPassedReverse | $element | 元素的顶边未超过屏幕顶部 |
onBottomVisibleReverse | $element | 元素的底边未超过屏幕底部 |
onPassingReverse | $element | 元素的顶部未超过屏幕顶部,但底部已超过 |
onBottomPassedReverse | $element | 元素的底边未超过屏幕顶部 |
图像回调函数2.2 中的新功能
仅在使用 type: 'fixed'
时发生的回调函数
上下文 | 描述 | |
---|---|---|
onLoad | img | 在图像完成加载后发生。 |
onAllLoaded | 最后加载的 img | 在所有在同一时间初始化的 img 加载完毕后发生。 |
固定回调函数2.2 中的新功能
仅在使用 type: 'fixed'
时发生的回调函数
上下文 | 描述 | |
---|---|---|
onFixed | $element | 在元素被分配 position fixed 后发生。 |
onUnfixed | $element | 在元素从固定位置移除后发生。 |
实用程序回调函数
在命名 visibility 事件上发生的回调函数
上下文 | 描述 | |
---|---|---|
onUpdate(calculations) | $element | 每次元素的计算更新时都会发生。 |
onRefresh | $element | 只要元素的 visibility 被刷新就会发生。 |