React Native Animated, Complete Event


88

Яка найкраща практика викликати подію, коли Animated.spring закінчується?

Animated.spring(this.state.pan, {
    toValue: 0
}).start()

Я досить багато шукав і не знайшов жодного способу зробити це. Я міг би використовувати addListener, щоб перевірити, чи досягла анімація свого кінцевого значення чи часу очікування, але вони обидва відчувають себе некрасивими виправленнями того, що повинно бути надзвичайно простим.

Хтось знає?

Відповіді:



14

Це буде запущено на початку анімації

.start(console.log("Start Animation")

Використовуючи функцію зі стрілкою або функцію, done буде викликано в кінці анімації

.start(() => {console.log("Animation DONE")})

І нарешті, це те, як це виглядає в контексті функції.

_play(){
  Animated.timing(this.state.progress, {
     toValue: 1,
     duration: 5000,
     easing: Easing.linear,
   }).start(() => {console.log("Animation DONE")});
}

Сподіваюся, це допоможе!


12
.start(console.log("Start Animation")спрацьовуватиме лише на початку анімації через побічний ефект. Це функціонально те саме, що і console.log("Start Animation"); Animated.timing(...).start(..). Це не навмисне використання методу. Будь ласка, не використовуйте це. start()приймає зворотний дзвінок, коли закінчується анімація, і все.
zeh

Чи не могли б ви зациклювати анімацію, викликавши ту саму функцію в рамках цього зворотного виклику завершення?
Том

0

В основному існують ці три підходи робити щось, коли анімація закінчується. По-перше: ви можете використовувати метод зворотного виклику, переданий у виклик (зворотний дзвінок). По-друге: Ви можете використовувати stopAnimation, який також приймає зворотний виклик. Наприклад, ви можете зробити переклад від 0 до 150 і на основі значення, яке ви анімуєте, сказати "рух", а коли рух досягне значення, ви можете щось виконати.

let motion = Animated.Value(0);

motion.addListener(({value}) =>{
  if(value>=10){
    pos.stopAnimation((val)=>{console.log('stopped in '+val)});
  }
});

Більше на https://www.youtube.com/channel/UCl5-W0A8tE3EucM7E_yS62A

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.