数据加载 / InfiniteScroll无限滚动组件
说明
当页面滚动到页面底部一定距离时, InfiniteScroll组件会触发onInfinite
事件, 通过回调传入的参数infiniteScroll
来处理对应的状态.
比如: 当需要异步请求AJAX数据时, 数据请求后, 需要执行infiniteScroll.complete()
来变更InfiniteScroll组件的状态,当继续向下滚动时, 还能继续出发onInfinite
事件, 如此往复.
当通过AJAX请求的数据已经全部请求完毕(没有更多的数据时), 则执行infiniteScroll.enable(false)
, 表明InfiniteScroll任务全部结束. 此时, 将解除对Content组件的onScroll
事件的监听.
其他
InfiniteScroll组件会附带InfiniteScrollContent内容,它只是起到显示状态的作用, 你也可以自己定义显示状态.
其中, 标示状态的state
有三种值: enabled/disabled/loading, 且这三种状态会写在父组件上, 因此可以用这个特性定义子组件的样式. 比如像下面的demo
建议
首屏的数据至少占满两个以上屏幕高度, 通过 InfiniteScroll 加载的数据也至少能占满两个以上的屏幕高度, 这样的体验效果会好点
注意
- 组件中的方法是在事件的回调参数中定义的.
- 组件支持js滚动监听, 如何设置参考Content组件
如何引入
// 引入
import { InfiniteScroll } from 'vimon'
// 安装
Vue.component(InfiniteScroll.name, InfiniteScroll)
// 或者
export default{
components: {
InfiniteScroll
}
}
- 源码:
- 参考:
-
- component:Base/Content
传入属性 / Props:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
enabled |
Boolean |
<optional> |
true
|
设置当前组件的可用状态, 如果为false, 则移除当前组件绑定的全部事件处理函数, 隐藏组件并且将状态设置为disabled |
threshold |
String |
<optional> |
'15%'
|
激活`onInfinite`事件的阈值. 阈值可以使百分比也可以是具体的px值. 如果为百分比(10%), 则距离底部10%的位置将为激活点; 如果为具体px值(100px), 则页面底部向下100px出为激活点. |
对外事件 / Fires:
- component:InfiniteScroll#event:onInfinite
用法 / Usages
<InfiniteScroll threshold="20%" @onInfinite="onInfinite" loadingSpinner="ios" loadingText="正在加载..."></InfiniteScroll>
// ....
.ion-infinite-scroll{
.loadedAll{
display: none;
}
}
.ion-infinite-scroll[state=disabled]{
.loadedAll{
display: block;
}
}
// ....
methods: {
onInfinite(infiniteScroll){
let _start = this.i;
if(_start < 40){
setTimeout(() => {
for (; (10 + _start) > this.i; this.i++) {
this.list.push(`item - ${this.i}`)
}
// 当前异步完成
infiniteScroll.complete();
}, 100)
}else{
// 当前异步结束, 没有新数据了
infiniteScroll.enable(false);
}
}
// ....