有没有办法找出 react-native 的 listview/scrollview 组件的滚动方向?
原生 iOS 组件似乎可以通过计算与 的偏移量来做到这一点scrollViewWillBeginDragging
,scrollViewDidScroll
但这些似乎没有绑定。
有没有办法找出 react-native 的 listview/scrollview 组件的滚动方向?
原生 iOS 组件似乎可以通过计算与 的偏移量来做到这一点scrollViewWillBeginDragging
,scrollViewDidScroll
但这些似乎没有绑定。
您可以使用 ScrollView 的 onScroll 事件并在事件回调中检查 contentOffset:
https://rnplay.org/apps/FltwOg
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
ScrollView,
Text,
View,
} = React;
var SampleApp = React.createClass({
offset: 0,
onScroll: function(event) {
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.offset ? 'down' : 'up';
this.offset = currentOffset;
console.log(direction);
},
render: function() {
return (
<View style={styles.container}>
<ScrollView style={styles.scroller} onScroll={this.onScroll}>
<Text>Scrollable content here</Text>
</ScrollView>
</View>
)
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 50,
},
scroller: {
height: 5000,
},
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
当新旧偏移量之间的差异非常小时,alexp 的解决方案无法准确指定方向。所以我把它们过滤掉了。
_onScroll = event => {
const currentOffset = event.nativeEvent.contentOffset.y;
const dif = currentOffset - (this.offset || 0);
if (Math.abs(dif) < 3) {
console.log('unclear');
} else if (dif < 0) {
console.log('up');
} else {
console.log('down');
}
this.offset = currentOffset;
};