所以我已经用infinite scroll
实现了我自己的<ScrollView onScroll={}>
类型的东西,并且在确定用户是否在屏幕中间滚动时遇到了麻烦。 handlescroll
函数中的if语句有时会同时触发(取决于我中途滚动多少)如果我中途滚动。
有没有人做过与此类似的事情,如果你能帮我提供一些有关你如何实现它的见解。
这是我的滚动视图,它只包含许多帖子组件。
return (
<ScrollView key={"scrollview_1"} onScroll={this.handleScroll.bind(this)}>
{ postComponents }
</ScrollView>
)
handleScroll (event: Object) {
console.log(event.nativeEvent.contentOffset.y);
const offset = event.nativeEvent.contentOffset.y;
const screenHeight = Dimensions.get('window').height;
const {FeedActions,} = this.props;
const {nextUrl,} = feed;
// Somehow figure out a way to check if past halfway only once
var x = (offset % screenHeight/2);
if( x > 0 && x < 40){
// Run API call get more posts, then render the new components
FeedActions.getMorePosts(nextUrl, true);
}
}
我还发现如果他们中途滚动过去了只滚动0 (offset%screenheight/2)
一点,我的FeedActions.getMorePosts
函数将再次运行。为了解决这个问题,我正在考虑实现一个state
,它将保存过去屏幕高度的数组。在我的if语句中,我将检查是否已经通过了我的状态数组中的任何屏幕高度。