React Native Animated, Sự kiện hoàn chỉnh


88

Phương pháp hay nhất để kích hoạt sự kiện khi Animated.spring kết thúc là gì?

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

Tôi đã tìm kiếm khá nhiều và không tìm thấy một cách duy nhất để làm điều đó. Tôi có thể sử dụng addListener để kiểm tra xem hoạt ảnh đã đạt đến giá trị kết thúc hay hết thời gian chờ, nhưng cả hai đều cảm thấy như những bản sửa lỗi xấu xí cho những gì phải siêu đơn giản.

Có ai biết không?

Câu trả lời:



14

Điều này sẽ được kích hoạt khi bắt đầu hoạt ảnh

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

Sử dụng một hàm hoặc hàm mũi tên, xong sẽ được gọi ở phần cuối của hoạt ảnh

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

Và phân tích đây là những gì nó trông như thế nào trong ngữ cảnh của một hàm.

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

Hy vọng rằng sẽ giúp!


12
.start(console.log("Start Animation")sẽ chỉ "cháy" khi bắt đầu hoạt ảnh vì một hiệu ứng phụ. Đây là chức năng giống như console.log("Start Animation"); Animated.timing(...).start(..). Đây không phải là việc cố ý sử dụng phương pháp này. Vui lòng không sử dụng cái này. start()thực hiện cuộc gọi lại khi hoạt ảnh kết thúc và đó là tất cả.
zeh

Bạn có thể lặp lại hoạt ảnh bằng cách gọi cùng một hàm trong lệnh gọi lại hoàn thành này không?
Tom

0

Về cơ bản, có ba cách tiếp cận này để làm điều gì đó khi hoạt ảnh kết thúc. Đầu tiên: bạn có thể sử dụng phương thức gọi lại được truyền vào phương thức gọi lại (callback). Thứ hai: Bạn có thể sử dụng stopAnimation cũng chấp nhận lệnh gọi lại Thứ ba: Cách ưa thích của tôi, bao gồm việc đặt người nghe vào giá trị hoạt ảnh và làm điều gì đó dựa trên giá trị hiện tại. Ví dụ: bạn có thể tạo bản dịch từ 0 đến 150 và dựa trên giá trị mà bạn tạo hoạt ảnh, hãy nói 'chuyển động' và khi chuyển động đạt đến giá trị, bạn có thể thực hiện điều gì đó.

let motion = Animated.Value(0);

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

Thêm trên👉https: //www.youtube.com/channel/UCl5-W0A8tE3EucM7E_yS62A

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.