Вы можете использовать рекурсию для вызова одной и той же анимации снова и снова, вызывая одну и ту же функцию в обратном вызове запуска.
let animationX = new Animated.Value(0);
const left = (toValue: number) =>
Animated.timing(animationX, { toValue: -toValue, duration: 1500 });
const right = (toValue: number) =>
Animated.timing(animationX, { toValue, duration: 1500 });
const loopSway = () => {
Animated.sequence([
left(100),
right(100),
]).start(() => loopSway())
}
Однако мне не удалось создать повторно используемую функцию loopAnimation. при попытке я получаю сообщение об ошибке undefined is not an object (evaluating 'animations[current].start')
const sway = Animated.sequence([
left(100),
right(100),
])
const loopAnimation = (animation) => {
animation.start(() => loopAnimation(animation))
}
const loopSway = loopAnimation(sway)
Похоже, что в React Native Animated есть побочный эффект, который не позволяет назначать анимации как константы: (
Я пробовал клонирование анимации
const loopAnimation = (animation) => {
const animationClone = {...animation}
animation.start(() => loopAnimation(animationClone))
}
, и я попытался сделать анимацию значением состояния.
Но не добился успеха ни с одним, поэтому был бы признателен, если бы кто-нибудь знал, как сделать это fn многоразовый!