UNPKG

weex-nuke

Version:

基于 Rax 、Weex 的高性能组件体系 ~~

102 lines (81 loc) 5.38 kB
# ScrollView * category: Components * chinese: 滚动组件 * type: 基本 --- ## 设计思路 ScrollView 是一个包装了滚动操作的组件。一般情况下需要一个确定的高度或 flex 1 来保证 ScrollView 的正常展现。 ## API | 属性 | 说明 | 类型 | 默认值 | | -------------------------------------- | -------------------------------------------------------------------------------------------- | ------------- | ------ | | horizontal | 是否横向 | boolean | false | | showScrollBar | 是否显示滚动条 | boolean | true | | showsHorizontalScrollIndicator【废弃】 | 是否显示水平滚动条 | boolean | true | | showsVerticalScrollIndicator 【废弃】 | 是否显示垂直滚动条 | boolean | true | | onEndReachedThreshold | 设置加载更多的偏移 | string | 500rem | | onEndReached | 滚动到底部时的事件( 距离底部 onEndReachedThreshold 长度时触发) | event | 无 | | scrollEventThrottle | 在滚动过程中,scroll 事件被调用的频率(默认值为 100),用于滚动的节流 | number | 100 | | onScroll | 滚动时触发的事件 | function | | onScrollStart | 滚动开始时触发的事件 | function | | onScrollEnd | 滚动结束时触发的事件 | function | | style | 容器样式 | object | 无 | | contentContainerStyle | 容器内部 container 样式 | 无 | | id | scrollview 标识,如果页面存在多个 ScrollView,且需要使用下拉刷新组件,则必须添加 id 作为标识 | 'scroller_rv' | #### 实例方法 - **resetLoadmore()** ```js //调用 resetLoadmore 以保证上一次加载不到数据后,下次还能继续触发 onEndReached this.refs.scroller1.resetLoadmore(); //省略部分代码 <ScrollView ref="scroller1" onEndReached={this.loadmore}> {this.getViews()} </ScrollView>; ``` 这是一个重置 `onEndReached 是否能触发的` 标记位的方法。标记位默认为 true,即滚动到底部即可触发 onEndReached 事件。但**当 onEndReached 触发后,没有通过 setState 增加数据导致页面 scroller 内容变长,(或者反而变短了),native 端会将标记位设置为 false。** 此时调用 resetLoadmore ,可以清除标记位,让 onEndReached 可以再次触发。 - **scrollTo(options = { y: 0, animated: true})** 当前 ScrollView 实例需要滚动到某个位置时,目前只支持纵向滚动 - options: - options.y : 位移偏移量,默认 0 - options.animated: 是否展示滑动动画 , 默认 true ```js scrollTo = e => { this.refs.scroller1.scrollTo({ y : 100 }); }; render(){ return ( <ScrollView ref="scroller1" style={styles.scroller}> <View style={{ height: 400 }}></View> <View style={{ height: 400 }}></View> <View style={{ height: 400 }}></View> <Button onPress={this.scrollTo}> 滑动到 100rem </Button> </ScrollView> ) } ``` - **scrollToElement(ref,options = {offset:0, animated:true})** 当前 ScrollView 实例需要把某个元素滚动到可视区域时 - ref : 元素实例 - options: - options.offset : 位移偏移量,默认 0 - options.animated: 是否展示滑动动画 , 默认 true ```js scrollToElement = e => { this.refs.scroller1.scrollToElement(this.refs.specialView); }; render(){ return ( <ScrollView ref="scroller1" style={styles.scroller}> <View style={{ height: 400 }}></View> <View style={{ height: 400 }}></View> <View style={{ height: 400 }} ref="specialView"><Text> hi, I am special </Text></View> <View style={{ height: 400 }}></View> <Button onPress={this.scrollToElement}> 滑动到指定元素:ref = specialView </Button> </ScrollView> ) } ``` ## 其他 - bug、建议联系 <a href="dingtalk://dingtalkclient/action/sendmsg?dingtalk_id=kjwo3w5">@翊晨</a> - 钉钉交流群 <img src="https://img.alicdn.com/tfs/TB101EESpXXXXXFXpXXXXXXXXXX-1122-1362.jpg" width="260" />