React native:获取当前scrollview的滚动位置
是否有可能得到当前的滚动位置,或当前页面的<ScrollView>
组件反应原生?
所以像这样:
<ScrollView horizontal={true} pagingEnabled={true} onScrollAnimationEnd={() => { // get this scrollview's current page or x/y scroll position }}> this.state.data.map(function(e, i) { <ImageCt key={i}></ImageCt> }) </ScrollView>
尝试。
<ScrollView onScroll={this.handleScroll} />
接着:
handleScroll: function(event: Object) { console.log(event.nativeEvent.contentOffset.y); },
Brad Oyler的回答是正确的。 但你只会收到一个事件。 如果你需要获得滚动位置的不断更新,你应该设置scrollEventThrottle
,如下所示:
<ScrollView onScroll={this.handleScroll} scrollEventThrottle={16} > <Text> Be like water my friend … </Text> </ScrollView>
而事件处理程序:
handleScroll: function(event: Object) { console.log(event.nativeEvent.contentOffset.y); },
请注意,您可能遇到性能问题。 相应地调节油门。 16给你最新的更新。 0只有一个。
我相信contentOffset
会给你一个包含左上滚动偏移量的对象:
http://facebook.github.io/react-native/docs/scrollview.html#contentoffset
这应该适用于Android和iOS(在Android上testing):
<ScrollView ref='myScrollView'> <Text>Blah</Text> </ScrollView> ... getOffset() { console.log(this.refs.myScrollView.scrollProperties.offset); }
至于页面,我正在使用一个更高阶的组件,基本上使用上述方法来做到这一点。 实际上,只需要一点时间,即可了解初始布局和内容更改等细节。 我不会声称做了“正确的”,但从某种意义上说,我会考虑使用正确的答案来使用这个小心谨慎的组件。
请参阅: react-native-paged-scroll-view 。 会爱反馈,即使这是我所做的一切都是错的!
目前还不清楚究竟是什么作者想要得到的。 位置改变的事件或只是目前的位置?
如果你想听更改,那么接受的答案是正确的。
但是,如果您只想获得当前位置,则调用onScroll侦听器将会导致性能问题。 目前,获取当前滚动位置的最高性能方法是使用react-native-invoke包。 有一个确切的例子,但包做了多个其他的事情。
为了得到滚动结束后的X / Y原始问题要求,最简单的方法可能是这样的:
<ScrollView horizontal={true} pagingEnabled={true} onMomentumScrollEnd={(event) => { // scroll animation ended console.log(e.nativeEvent.contentOffset.x); console.log(e.nativeEvent.contentOffset.y); }}> ...content </ScrollView>