Как запустить анимацию на изображении после определенного смещения прокрутки?

#react-native

Вопрос:

Как запустить анимацию для перевода и изменения высоты изображения после определенного смещения (например, 100) в ScrollView? Я устанавливаю состояние, когда направление прокрутки уменьшается после достижения смещения, и использую это, чтобы определить, следует ли мне запускать свои функции Animated.timing, но если я использую setState в onScroll своем приложении зависания, возможно, из-за установки состояния слишком много раз, но как этого избежать?

Мой код для настройки состояния:

 onScroll={(event) => {
      const currentOffset = event.nativeEvent.contentOffset.y;
      const direction = currentOffset > offset ? 'down' : 'up';
      if (direction === 'down' amp;amp; currentOffset >= 100 amp;amp; currentOffset <= 110) setRunAnimations(true)
  }}
 

Я использую состояние для запуска своих анимаций, т. Е. Если значение true, то запустите эту функцию:

 const scrollY = useRef(new Animated.Value(0)).current;

const enlarge = () => {
  Animated.timing(scrollY, {
    toValue: 1,
    duration: 5000,
  }).start();
};

if (runAnimations) enlarge();
 

Ответ №1:

Вы можете избежать множественных заданных состояний, проверив, не является ли runAnimations ложным в вашем onscroll. Например.

 onScroll={(event) => {
      const currentOffset = event.nativeEvent.contentOffset.y;
      const direction = currentOffset > offset ? 'down' : 'up';
      if (!runAnimation amp;amp; direction === 'down' amp;amp; currentOffset >= 100 amp;amp; currentOffset <= 110) setRunAnimations(true)
  }}
 

Анимация будет запущена только один раз. Однако в какой-то момент вы можете сбросить параметры запуска.