问题描述
因此,当您可以使用滑动选择时间时,我正在尝试做一个计时器。我创建了滑动和动画,因此在滑动中间元素上方和下方的元素时会消失。这是我的代码:
const { width,height } = Dimensions.get("window");
const styles = StyleSheet.create({
display: {
flexDirection: 'row',},timeContainer: {
marginTop: height / 2,width: width,alignItems: 'center',text: {
fontSize: 25,}
})
const SampleFunction = (item) => {
Alert.alert(item);
}
const App = () => {
const [containerHeight,setContainerHeight] = useState(height);
let numbers = new Array(40);
for (i = 0,num = 5; i < numbers.length; i++,num += 5) {
numbers[i] = num;
}
const TIME_HEIGHT = styles.text.fontSize * 1.34;
const clock = useClock();
const index = useValue(0);
const snapPoints = numbers.map((_,i) => i * -TIME_HEIGHT)
const offsetY = useValue(0);
const y = useValue(0);
const {
gestureHandler,state,velocity,translation
} = usePanGestureHandler();
const to = snapPoint(y,velocity.y,snapPoints);
useCode(
() => [
cond(eq(state,State.ACTIVE),[
set(y,add(offsetY,translation.y))
]),cond(eq(state,State.END),timing({ clock,from: y,to })),set(offsetY,y),cond(not(clockRunning(clock)),[
set(index,floor(divide(y,-TIME_HEIGHT))),debug("index",index)
]),]),],[]
);
const visibleCards = Math.floor((containerHeight - (height / 2 - TIME_HEIGHT) - (height / 2)) / TIME_HEIGHT);
return (
<View>
<Image
style={{
width: width,height: height / 2 - TIME_HEIGHT,position: 'absolute',zIndex: 0
}}
source={require('./assets/TopImage.jpg')}
/>
<Image
style={{
width: width,height: height / 2,marginTop: height / 2 + TIME_HEIGHT * 2,zIndex: 0
}}
source={require('./assets/BotImage.jpg')}
/>
<PanGestureHandler {...gestureHandler}>
<Animated.View>
<Animated.View style={styles.timeContainer}>
{numbers.map((item,key) => {
const positionY = add(y,key * TIME_HEIGHT);
const isDisappearing = -TIME_HEIGHT;
const isOnTop = 0;
const isOnBottom = (visibleCards - 1) * TIME_HEIGHT;
const isAppearing = visibleCards * TIME_HEIGHT;
const extraTranslationY = interpolate(y,{
inputRange: [isOnBottom,isAppearing],outputRange: [0,-TIME_HEIGHT / 4],extrapolate: Extrapolate.CLAMP
});
const translateY = add(interpolate(y,{
inputRange: [-TIME_HEIGHT * key - height / 2,0],outputRange: [-TIME_HEIGHT * key - height / 2,extrapolate: Extrapolate.CLAMP
}),extraTranslationY);
const opacity = interpolate(positionY,{
inputRange: [isDisappearing,isOnTop,isOnBottom,outputRange: [0.3,1,0.3],});
return (
<Animated.View
key={key}
onPress={ SampleFunction.bind(item) }
style={[{ opacity,transform: [{ translateY }] }]}
>
<Text style={styles.text}> {item} </Text>
</Animated.View>
)
})}
</Animated.View>
</Animated.View>
</PanGestureHandler>
</View>
)
}
export default App;
但是我有一个问题。当我到达数组的开始或结尾时,我仍然可以向下滑动,因此我的元素将由于不透明而消失。它返回了,但是看起来不太好,所以我该如何解决?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)