ras*_*tay 4 javascript animation reactjs react-native react-native-gesture-handler
import React, { useRef, useState, useCallback } from 'react';
import { View, Animated } from 'react-native';
import { PanGestureHandler } from 'react-native-gesture-handler';
const InfoBox = ({ info }: Props) => {
const [currenPos, setCurrentPos] = useState<number>(0);
const translateY = useRef(new Animated.Value(0)).current;
const onGestureEvent = useCallback(
Animated.event(
[
{
nativeEvent: {
translationY: translateY,
},
},
],
{
useNativeDriver: true,
},
),
[],
);
const handleTransformStyle = {
transform: [
{
translateY,
},
{
translateX: -55,
},
],
};
return (
<View style={styles.container}>
<PanGestureHandler
onGestureEvent={onGestureEvent}
>
<Animated.View style={[styles.handleBar, handleTransformStyle]}>
<View style={styles.separator} />
</Animated.View>
</PanGestureHandler>
</View>
);
};
export default InfoBox;
Run Code Online (Sandbox Code Playgroud)
我提供了一个非常简单的例子PanGestureHandler。第一次移动盒子时,它会移动到一个位置并停留在该位置。但是,如果我尝试再次移动它,它会从位置零开始,而不是从我离开它的同一位置开始。
任何帮助将非常感激。
编辑
我意识到这是由于偏移量重置而发生的。
我已经找到了解决这个问题的方法。
添加:onHandlerStateChangePanGestureHandler
<PanGestureHandler
onGestureEvent={onPanGestureEvent}
onHandlerStateChange={onHandlerStateChange}
>
...
</PanGestureHandler>
Run Code Online (Sandbox Code Playgroud)
然后,创建一个onHandlerStateChange像这样的函数:
const onHandlerStateChange = useCallback(() => {
translateY.extractOffset();
}, []);
Run Code Online (Sandbox Code Playgroud)
translateY.extractOffset();施展了魔法。它设置偏移值。唷!