React Native Animated, Complete Event


90

Animated.spring bittiğinde bir olayı tetiklemek için en iyi uygulama nedir?

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

Biraz araştırdım ve bunu yapmanın tek bir yolunu bulamadım. AddListener'ı animasyonun son değerine mi yoksa bir zaman aşımına mı ulaştığını kontrol etmek için kullanabilirim, ancak ikisi de süper basit olması gereken şey için çirkin düzeltmeler gibi hissediyorlar.

Kimse biliyor mu?

Yanıtlar:



16

Bu, animasyonun başlangıcında ateşlenecek

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

Bir ok fonksiyonu veya işlevi kullanarak, çağrılacaktır, done END animasyon

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

Ve son olarak bu, bir fonksiyon bağlamında nasıl göründüğüdür.

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

Umarım yardımcı olur!


12
.start(console.log("Start Animation")bir yan etki nedeniyle yalnızca animasyonun başlangıcında "patlar". Bu işlevsel olarak aynıdır console.log("Start Animation"); Animated.timing(...).start(..). Bu, yöntemin kasıtlı kullanımı değildir. Lütfen bunu kullanmayın. start()animasyon bittiğinde bir geri arama alır ve hepsi bu.
zeh

Bu tamamlama geri aramasında aynı işlevi çağırarak animasyonu döngüye alabilir misiniz?
Tom

0

Temel olarak, bir animasyon bittiğinde bir şeyler yapmak için bu üç yaklaşım vardır. Birincisi: call (callback) yöntemine aktarılan geri aramayı kullanabilirsiniz. İkincisi: Bir geri aramayı da kabul eden stopAnimation'ı kullanabilirsiniz Üçüncü: Canlandırılmış değere bir dinleyici yerleştirmeyi ve mevcut değere göre bir şeyler yapmayı tercih ettiğim yöntem. Örneğin, 0 ile 150 arasında bir çeviri yapabilir ve canlandırdığınız bir değere göre 'hareket' diyebilirsiniz ve hareket bir değere ulaştığında bir şeyler yapabilirsiniz.

let motion = Animated.Value(0);

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

Daha fazla bilgithttps: //www.youtube.com/channel/UCl5-W0A8tE3EucM7E_yS62A

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.