Both create infinite loops, but the motion pattern is very different. Understanding when to use each will save you time and keyframes.
loopOut("cycle") — Repeat exactly
Plays your keyframed animation, then jumps back to the start and plays again. Identical repetition.
Visual: → → → → (same direction each time)
Keyframe values: 0 → 100 → 0 → 100 → 0 → 100...
When to use cycle:
- Walking/running cycles
- Spinning/rotating objects
- Repeating pattern animations
- Any movement that starts and ends at the same value
Important: For a smooth cycle, your LAST keyframe value should match your FIRST keyframe value. Otherwise you'll see a "jump" at the loop point.
loopOut("pingpong") — Yo-yo motion
Plays forward, then plays BACKWARD, then forward again. Like a pendulum.
Visual: → ← → ← (alternating direction)
Keyframe values: 0 → 100 → 0 → 100 → 0...
When to use pingpong:
- Breathing/pulsing effects
- Pendulum swings
- UI hover animations
- Any back-and-forth motion where you DON'T want to set the return keyframes manually
The key advantage of pingpong: You only need to keyframe ONE direction. Set position from A to B, and pingpong automatically creates the B→A return. With cycle, you'd need to manually add a third keyframe at A again.
The other two loop types:
- loopOut("offset") — Each repeat builds on the previous value. 0→100, then 100→200, then 200→300. Great for progressive movement.
- loopOut("continue") — Continues the velocity of the last keyframe pair forever. Like throwing a ball — it keeps going in the same direction at the same speed.
Combining with keyframe count:
loopOut("pingpong", 2)Pro tip: Pingpong + Easy Ease = instant breathing/pulsing animation with just 2 keyframes. Set Scale from 95% to 105%, apply loopOut("pingpong"), Easy Ease both keyframes. Done — eternal gentle pulse.
Want a personalized answer for your project?
Ask Oliver for Free →