react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
68 lines (57 loc) • 1.55 kB
text/typescript
export interface ReanimatedWebTransformProperties {
translateX?: string;
translateY?: string;
rotate?: string;
rotateX?: string;
rotateY?: string;
scale?: number | string;
scaleX?: number;
scaleY?: number;
perspective?: string;
skew?: string;
skewX?: string;
}
interface AnimationStyle {
opacity?: number;
transform?: ReanimatedWebTransformProperties[];
}
export interface AnimationData {
name: string;
style: Record<number, AnimationStyle>;
duration: number;
}
export interface TransitionData {
translateX: number;
translateY: number;
scaleX: number;
scaleY: number;
reversed?: boolean;
}
export function convertAnimationObjectToKeyframes(
animationObject: AnimationData
) {
let keyframe = `@keyframes ${animationObject.name} { `;
for (const [timestamp, style] of Object.entries(animationObject.style)) {
keyframe += `${timestamp}% { `;
for (const [property, values] of Object.entries(style)) {
if (property !== 'transform') {
keyframe += `${property}: ${values}; `;
continue;
}
keyframe += `transform:`;
values.forEach((value: ReanimatedWebTransformProperties) => {
for (const [
transformProperty,
transformPropertyValue,
] of Object.entries(value)) {
keyframe += ` ${transformProperty}(${transformPropertyValue})`;
}
});
keyframe += `; `; // Property end
}
keyframe += `} `; // Timestamp end
}
keyframe += `} `; // Keyframe end
return keyframe;
}
;