反应原生动画,完成事件


88

Animated.spring完成时触发事件的最佳实践是什么?

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

我已经搜索了很多,还没有找到一种方法来做到这一点。我可以使用addListener来检查动画是否达到了最终值或超时,但是它们都感觉很难修复,因此应该非常简单。

有人知道吗?

Answers:



14

这将在动画开始时触发

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

使用一个或多个箭头功能,在动画结束时将调用完成

.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

基本上,这三种方法可以在动画结束时执行某些操作。首先:您可以使用传递给call(callback)方法的回调。第二:您可以使用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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.