Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a continuous loop with the animate method?

Tags:

framerjs

How does one continuous loop an animation using animate? In this example, all I want to do is endlessly rotate a white square.

myBall = new Layer
    x: 100
    y: 100
    width: 200
    height: 200
    borderRadius: "20px"
    backgroundColor: "#FFF"

myBall.animate
    properties:
        rotationZ: 360
    time: 1
myBall.on Events.AnimationEnd, ->
    this.animate
        properties:
            rotationZ: 360
        time: 1
    this.backgroundColor = "#666"

After the first 360˚ z rotation, the background color will be changed to #666, but the animations will cease. I think it would be ideal if repeat: -1 indicated continuous without having to listen for AnimationEnd.

like image 922
nipponese Avatar asked May 14 '26 18:05

nipponese


1 Answers

After the first animation rotates the layer to 360° you try to rotate it again to 360°, which returns in a visual non-existing animation. the solution for this is to set myBall.rotationZ = 0 right before you start rotating again. in your code:

myBall.on Events.AnimationEnd, ->
    this.rotationZ = 0 # reset to back to zero
    this.animate
        properties:
            rotationZ: 360
        time: 1

Other solution using new Animation

you can do this with states or an animation function, which results in cleaner code:

rotateAnim = new Animation
    layer: myBall
    properties:
        rotationZ: 360
    time: 1

rotateAnim.start() # kick if off once

rotateAnim.on "end", ->
    myBall.rotationZ = 0 # need to reset to zero so we can animate to 360 again
    rotateAnim.start()
like image 77
frischmilch Avatar answered May 19 '26 04:05

frischmilch



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!