Bounce
Also called spring bounce or bounciness
A spring setting from 0 to 1 for how much an element overshoots and wobbles, used with a duration in place of stiffness and damping.
import { useState } from 'react';
import { motion, useReducedMotion } from 'motion/react';
// 0 glides in, 0.2 to 0.3 adds a lively settle, 0.6 and up feels cartoonish.
const BOUNCE = 0.35;
// When it appears to arrive; the wobble plays out after this.
const VISUAL_DURATION = 0.4;
export function AddToCartButton() {
const [count, setCount] = useState(0);
const reduceMotion = useReducedMotion();
return (
<div className='flex items-center gap-3'>
<button
type='button'
onClick={() => setCount(count + 1)}
className='rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground'
>
Add to cart
</button>
<span role='status'>
{count > 0 && (
<motion.span
// A new key replays the pop on every add.
key={count}
initial={{ opacity: 0, scale: reduceMotion ? 1 : 0.5 }}
animate={{ opacity: 1, scale: 1 }}
transition={
reduceMotion
? { duration: 0.15 }
: {
type: 'spring',
visualDuration: VISUAL_DURATION,
bounce: BOUNCE
}
}
className='inline-block rounded-full bg-emerald-500/15 px-2.5 py-1 text-xs font-medium text-emerald-600'
>
Added · {count} in cart
</motion.span>
)}
</span>
</div>
);
}Animate the "Added to cart" badge in with a Motion spring using visualDuration 0.4 and bounce 0.35 so it pops and settles, and use bounce 0 for the cart drawer so it slides in cleanly. Use a simple fade when prefers-reduced-motion is set.
Paste into Layerwise or any AI coding tool.
Bounce explained
Physics settings like stiffness and damping are hard to tune by feel, so some tools offer a friendlier pair: a duration and a bounce. In Motion, bounce: 0 glides in without overshooting, 0.2 to 0.3 adds a lively settle, and values around 0.6 and up start to feel cartoonish.
Pair bounce with visualDuration, the time by which the element appears to arrive. Most of the movement finishes by then and the wobble plays out afterward, so you can change the bounce without changing how fast the animation feels.
Motion ignores bounce and duration when stiffness, damping, or mass is set. SwiftUI’s spring(duration:bounce:) uses the same idea, so values carry over between design and code.
Often confused with
- Damping
- Damping is the raw physics value behind the bounce, and its effect depends on stiffness and mass. Bounce is a simple 0 to 1 dial that works with a duration.
- Overshoot easing
- Overshoot easing is a cubic-bezier curve that passes its target once. Spring bounce comes from physics, so it can wobble more than once and settles gradually.
Related terms
All termsSpring animation
An animation driven by simulated spring physics in place of a fixed duration and curve, so motion can overshoot, settle, and react naturally.
Damping
A spring setting that works like friction, deciding whether motion bounces and wobbles on arrival or settles smoothly without overshooting.
Pop in
An entrance animation where an element scales up past its full size and settles back, giving it a quick, springy arrival.
Duration
The length of time an animation takes from start to finish, usually set in milliseconds. It decides whether motion feels snappy or sluggish.
Build it with Layerwise
Describe your app, watch it run in a live preview, and publish it with a database, storage, and sign-in built in.