2017-12-01 9 views
0

사용자가 어떤 방향으로 스크롤하는지 알 수있는 방법 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; 

위로 이동 위로 스크롤 위로 및 아래로 스크롤 아래로 경고 아래로 스크롤하십시오. 내가 무슨 일을

enter image description here

을하고있는 중이 야 :하지만 다음과 같은 오류를 받고 있어요? 아니면 더 좋은 방법이 있을까요?

감사합니다.

업데이트 1 :

개체 수있는 state.offset을 변경은 onScroll를 바인더 제본 및 setState를에 onScroll 기능을 변경 :

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입니다. 내가 뭘 놓치고 있니?

+1

또한 currentOffset은 개체이며 상태 "오프셋은 숫자입니다." – ShaneG

+0

메서드를 바인딩하고 있습니까? 'this.onScroll = this.onScroll.bind (this)'를 생성자에 넣습니다. – G0dsquad

+0

감사합니다. ** 업데이트 1 ** 질문을 업데이트했습니다. 솔루션에 오류가 없어야합니다. 유일한 문제는 내가 스크롤하는 방향에 관계없이 경고를 '위로'표시하는 것입니다. 나는 무엇을 놓치고 있습니까? 많은 감사가 – Somename

답변

1
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는 객체입니다. 요청에 따라 편집 됨 답변 :

+2

이 답변은 이제 의견에 맞게 수정되어야하며'this.offset' 비교 수정을 추가하십시오 :) – G0dsquad

+0

@ G0dsquad Answer edited :) 저를 상기시켜주는 건배! – ShaneG