试图找到滚动的方向
Trying to find the direction of the scroll
如何知道用户滚动 ScrollView
的方向。我想根据方向显示一个动作按钮。我正在尝试使用以下代码找到方向:
import React, {Component} from 'react'
import { StyleSheet, Alert, ScrollView, View, Text } from 'react-native'
class ScrollDirection extends Component {
constructor(props){
super(props);
this.state = {
offset: 0
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.offset ? 'down' : 'up';
this.state.offset = currentOffset;
Alert.alert(direction);
}
render() {
return (
<View style={styles.container}>
<ScrollView onScroll={this.onScroll}>
<View style={styles.scroller}>
<Text style={{fontSize:20,}}>ScrollDirection</Text>
</View>
</ScrollView>
</View>
)
}
}
var styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 50,
},
scroller: {
height: 5000,
},
});
export default ScrollDirection;
因此,在向上滚动时我想提醒向上,在向下滚动时提醒向下。但我收到以下错误:
我做错了什么?或者有什么更好的方法吗?
非常感谢!
更新 1:
将 state.offset 更改为对象,绑定 onScroll
并将 onScroll 函数更改为 setState:
constructor(props){
super(props);
this.state = {
offset: {}
}
this.onScroll = this.onScroll.bind(this)
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.state.offset ? 'down' : 'up';
this.setState({
offset : currentOffset.y
}),
Alert.alert(direction);
}
但无论我向哪个方向滚动,我都会收到 up
的警报。我错过了什么?
constructor(props){
super(props);
this.state = {
offset: 0
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.offset ? 'down' : 'up';
this.state.offset = currentOffset;
Alert.alert(direction);
}
这应该是:
constructor(props){
super(props);
this.state = {
offset: {}
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.state.offset ? 'down' : 'up';
this.setState({
offset : currentOffset
}),
Alert.alert(direction);
}
currentOffset 是一个对象。
根据要求编辑答案:)
好的,我找到了一种不使用 onscroll 属性 的新方法(而且它的调用并不多)。
但是,请注意,这不应用于使用 scrollview/flatlist 为视图设置动画,因为它仅检测用户何时停止滚动,并且可能会失败 ...
只需将其粘贴到您的 flatlist/scrollview
<Flatlist
...
onScrollBeginDrag={(event)=>{this.init=event.nativeEvent.contentOffset.y}}}
onScrollEndDrag={(event)=>{this.init<event.nativeEvent.contentOffset.y?alert('up'):alert('down')}}
.../>
如果您只需要在用户停止滚动后为某些内容设置动画,这很有用,在我的例子中,搜索栏,因为我不希望它在用户向下滚动时设置动画,因为这会占用一些有价值的东西 space
如何知道用户滚动 ScrollView
的方向。我想根据方向显示一个动作按钮。我正在尝试使用以下代码找到方向:
import React, {Component} from 'react'
import { StyleSheet, Alert, ScrollView, View, Text } from 'react-native'
class ScrollDirection extends Component {
constructor(props){
super(props);
this.state = {
offset: 0
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.offset ? 'down' : 'up';
this.state.offset = currentOffset;
Alert.alert(direction);
}
render() {
return (
<View style={styles.container}>
<ScrollView onScroll={this.onScroll}>
<View style={styles.scroller}>
<Text style={{fontSize:20,}}>ScrollDirection</Text>
</View>
</ScrollView>
</View>
)
}
}
var styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 50,
},
scroller: {
height: 5000,
},
});
export default ScrollDirection;
因此,在向上滚动时我想提醒向上,在向下滚动时提醒向下。但我收到以下错误:
我做错了什么?或者有什么更好的方法吗?
非常感谢!
更新 1:
将 state.offset 更改为对象,绑定 onScroll
并将 onScroll 函数更改为 setState:
constructor(props){
super(props);
this.state = {
offset: {}
}
this.onScroll = this.onScroll.bind(this)
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.state.offset ? 'down' : 'up';
this.setState({
offset : currentOffset.y
}),
Alert.alert(direction);
}
但无论我向哪个方向滚动,我都会收到 up
的警报。我错过了什么?
constructor(props){
super(props);
this.state = {
offset: 0
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.offset ? 'down' : 'up';
this.state.offset = currentOffset;
Alert.alert(direction);
}
这应该是:
constructor(props){
super(props);
this.state = {
offset: {}
}
}
onScroll(event){
var currentOffset = event.nativeEvent.contentOffset.y;
var direction = currentOffset > this.state.offset ? 'down' : 'up';
this.setState({
offset : currentOffset
}),
Alert.alert(direction);
}
currentOffset 是一个对象。 根据要求编辑答案:)
好的,我找到了一种不使用 onscroll 属性 的新方法(而且它的调用并不多)。 但是,请注意,这不应用于使用 scrollview/flatlist 为视图设置动画,因为它仅检测用户何时停止滚动,并且可能会失败 ...
只需将其粘贴到您的 flatlist/scrollview
<Flatlist
...
onScrollBeginDrag={(event)=>{this.init=event.nativeEvent.contentOffset.y}}}
onScrollEndDrag={(event)=>{this.init<event.nativeEvent.contentOffset.y?alert('up'):alert('down')}}
.../>
如果您只需要在用户停止滚动后为某些内容设置动画,这很有用,在我的例子中,搜索栏,因为我不希望它在用户向下滚动时设置动画,因为这会占用一些有价值的东西 space