代码之家  ›  专栏  ›  技术社区  ›  JulesUK

单击后将重新设定的值设置回原始值

  •  0
  • JulesUK  · 技术社区  · 3 年前

    我制作了一些可重复使用的动画代码。它工作得很好,但我不确定是否有可能在轻松按下按钮后将动画恢复到其原始值。

    我能想到的唯一方法是使用useShared Values来存储所有之前和之后的值,并根据需要设置它们,但这会涉及很多值,但因为动画已经运行,所以必须有一种方法将它们恢复到原来的开始?

    我用于动画的代码是:-

    入门动画.js

    import React, { useEffect } from 'react';
    import Animated, {
      useAnimatedStyle,
      useSharedValue,
      useDerivedValue,
      interpolate,
      withDelay,
      withTiming,
      withSpring,  
      Easing,
    } from 'react-native-reanimated';
    
    export const EntryAnimation = ({
      children,
      index,  
      rotateV, 
      scaleV,
      offsetXV, 
      offsetYX,
    }) => { 
      const play = useSharedValue(play);
      const progress = useDerivedValue(() => {
        return play.value 
          ? withDelay(50 * (index ?? 0), withSpring(1, { duration: 350 }))  
          : 0; 
      });
      
      useEffect(() => { 
        play.value = play;
      }, []);
    
      const animatedStyle = useAnimatedStyle(() => {
        // const opacity = interpolate(progress.value, [0, 1], [0, 1]);
        const translateY = interpolate(progress.value, [0, 1], [0, offsetYX]);
        const translateX = interpolate(progress.value, [0, 1], [0, offsetXV]);
        const rotate = interpolate(progress.value, [0, 1], [0, rotateV]);
        const scale = interpolate(progress.value, [0, 1], [1, scaleV]);
    
        return {
          transform: [{ translateY }, { translateX }, { rotate }, { scale }],
        };
      });
    
      return <Animated.View style={animatedStyle}>{children}</Animated.View>;
    };
    

    为了在我的主代码中的一个元素上使用,我使用:-

     <EntryAnimation
                      index={1}
                      rotateV={0}
                      scaleV={0.8}
                      offsetXV={0}
                      offsetYX={-270}>
                      <Animated.Image
                        source={{ uri: item.poster }}
                        style={[styles.posterImage, { zIndex: 6 }]}
                      />
                    </EntryAnimation>
    

    我试过使用下面的代码,但因为它是三元语句,所以我会出错吗?

    {animStarted ? (
          <EntryAnimation
                          index={1}
                          rotateV={0}
                          scaleV={0.8}
                          offsetXV={0}
                          offsetYX={-270}
                          >
          ) : (
            <EntryAnimation
                          index={1}
                          rotateV={0}
                          scaleV={1}
                          offsetXV={0}
                          offsetYX={0}
                          >
          )}
    

    有什么想法吗?

    0 回复  |  直到 3 年前