ScrollView component for Rax.
npm install rax-scrollview
ScrollView 是一个包装了滚动操作的组件。一般情况下需要一个确定的高度来保证 ScrollView 的正常展现。
``bash`
$ npm install rax-scrollview --save
| 属性 | 类型 | 默认值 | 必填 | 描述 | 支持 |
| ------------------------------ | ---------- | ---------- | -------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| scrollEventThrottle | number | 50 | false | 这个属性控制在滚动过程中,scroll 事件被调用的频率,用于滚动的节流 | boolean
|
| horizontal | | - | false | 设置为横向滚动 | number
|
| scrollTop | | 0 | false | 竖向滚动距离,优先级高于scrollTo方法(注:运行时小程序无法生效,请使用 scrollTo 方案) | number
|
| scrollLeft | | 0 | false | 横向滚动距离,优先级高于scrollTo方法(注:运行时小程序无法生效,请使用 scrollTo 方案) | boolean
|
| showsHorizontalScrollIndicator | | true | false | 是否允许出现水平滚动条 | boolean
|
| showsVerticalScrollIndicator | | true | false | 是否允许出现垂直滚动条 | number
|
| onEndReachedThreshold | | 500 | false | 设置加载更多的偏移 | function
|
| onEndReached | | - | false | 滚动区域还剩onEndReachedThreshold的长度时触发 | function
|
| onScroll | | - | false | 滚动时触发的事件,返回当前滚动的水平垂直距离 | function
|
| onTouchStart | | - | false | touchStart 触发的事件,返回触摸点数据(touches、changedTouches) | function
|
| onTouchMove | | - | false | touchMove 触发的事件,返回触摸点数据(touches、changedTouches) | function
|
| onTouchEnd | | - | false | touchEnd 触发的事件,返回触摸点数据(touches、changedTouches) | function
|
| onTouchCancel | | - | false | touchCancel 触发的事件,返回触摸点数据(touches、changedTouches) | boolean |
| disableScroll | | - | false | 是否禁止滚动, rax-scrollview@3.3.3 及以上版本支持 |
|
#### 参数
参数为 object,包含以下属性
| 属性 | 类型 | 默认值 | 必填 | 描述 | 支持 |
| -------- | --------- | ---------- | -------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| x | number | - | 否 | 横向的偏移量 | number
|
| y | | - | 否 | 纵向的偏移量 | boolean
|
| animated | | true | 否 | 在设置滚动条位置时使用动画过渡 | number
|
| duration | | 400 | 否 | 当 animated 设置为 true 时,可以设置 duration 来控制动画的执行时间,单位 ms |
|
#### 参数
参数为 object,包含以下属性
| 属性 | 类型 | 默认值 | 必填 | 描述 | 支持 |
| -------- | --------- | ---------- | -------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id | string | - | 是 | 需要滚动到的元素 id | boolean
|
| animated | | true | 否 | 在设置滚动条位置时使用动画过渡 | number
|
| duration | | 400 | 否 | 当 animated 设置为 true 时,可以设置 duration 来控制动画的执行时间,单位 ms | number
|
| offsetX | | - | 否 | 滚动的额外 X 偏移 | number
|
| offsetY | | - | 否 | 滚动的额外 Y 偏移 |
|
`jsx
import { createElement, Component, render, createRef } from 'rax';
import DriverUniversal from 'driver-universal';
import View from 'rax-view';
import Text from 'rax-text';
import ScrollView from 'rax-scrollview';
function Thumb() {
return (
);
}
const THUMBS = new Array(20).fill(1);
const createThumbRow = (val, index) =>
class App extends Component {
state = {
horizontalScrollViewEventLog: false,
scrollViewEventLog: false,
};
constructor(props) {
super(props);
this.horizontalScrollView = createRef();
}
render() {
return (
style={{
height: '100rpx',
}}
horizontal={true}
onEndReached={() =>
this.setState({ horizontalScrollViewEventLog: true })
}
>
{THUMBS.map(createThumbRow)}
onClick={() => {
this.horizontalScrollView.current.scrollTo({ x: 0 });
}}
>
{this.state.horizontalScrollViewEventLog ? 'onEndReached' : ''}
this.scrollView = scrollView;
}}
onEndReached={() => this.setState({ scrollViewEventLog: true })}
>
{THUMBS.map(createThumbRow)}
onClick={() => {
this.scrollView.scrollTo({ y: 0 });
}}
>
);
}
}
const styles = {
root: {
width: '750rpx',
paddingTop: '20rpx',
},
sticky: {
position: 'sticky',
width: '750',
backgroundColor: '#cccccc',
},
container: {
padding: '20rpx',
borderStyle: 'solid',
borderColor: '#dddddd',
borderWidth: '1rpx',
marginLeft: '20rpx',
marginRight: '20rpx',
marginBottom: '10rpx',
},
button: {
margin: '7rpx',
padding: '5rpx',
alignItems: 'center',
backgroundColor: '#eaeaea',
borderRadius: '3rpx',
},
box: {
width: '64rpx',
height: '64rpx',
},
eventLogBox: {
padding: '10rpx',
margin: '10rpx;,
height: '80rpx',
borderWidth: '1rpx',
borderColor: '#f0f0f0',
backgroundColor: '#f9f9f9',
},
};
render(
``