-
Notifications
You must be signed in to change notification settings - Fork 183
/
Copy pathFade.tsx
58 lines (51 loc) · 1.21 KB
/
Fade.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import React, { useRef } from "react";
import { Animated, ViewProps } from "react-native";
import { AnimationContext } from "./context";
const START_VALUE = 0.5;
const END_VALUE = 1;
const useNativeDriver = true;
const isInteraction = false;
export interface FadeProps extends ViewProps {
/* Animation duration, default is 500 */
duration?: number;
}
export const Fade: React.FC<FadeProps> = ({
duration = 500,
children,
style,
}) => {
const animation = useRef(new Animated.Value(START_VALUE));
const start = () => {
Animated.sequence([
Animated.timing(animation.current, {
duration,
isInteraction,
toValue: END_VALUE,
useNativeDriver,
}),
Animated.timing(animation.current, {
duration,
isInteraction,
toValue: START_VALUE,
useNativeDriver,
}),
]).start((e) => {
if (e.finished) {
start();
}
});
};
React.useEffect(() => {
start();
}, []);
const animationStyle = {
backgroundColor: "#dfdfdf",
height: "100%",
opacity: animation.current,
};
return (
<AnimationContext.Provider value={[animationStyle, style]}>
{children}
</AnimationContext.Provider>
);
};