Gesture Responses

dylantarre/animation-principles/skills/05-by-animation-type/gesture-responses

by dylantarre83597134ba8fNo license99 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 9 months ago

Use when responding to touch or click interactions - button presses, drag feedback, swipe responses, tap ripples, or any direct manipulation animation.

Instructions onlyDesign & Creative
AI-generated overview

Guides animation of touch and click gesture feedback using Disney's 12 animation principles.

What it does
This skill provides guidance for animating direct-manipulation feedback such as button presses, drag responses, swipes, tap ripples, and release animations. It maps Disney's 12 animation principles onto interaction states and supplies timing recommendations plus CSS and JavaScript implementation patterns for press, release, ripple, and drag-snap behavior. It is an instructions-only skill and produces no files or scripts.
When to use it
Use it when implementing or refining touch or click interaction feedback, such as press states, drag feedback, swipe responses, or tap ripples. It is suited to interface work where gesture responses need to feel immediate and physically satisfying.
Requirements
No tools, packages, or credentials are required; the skill is instructions only and ships no scripts. Applying the CSS and JavaScript patterns assumes a web front end, and the guidance recommends testing on actual touch devices.

Gesture Response Animations

Apply Disney's 12 principles to direct user interactions.

Principle Application

Squash & Stretch: Elements compress on press (scale 0.95-0.97), spring back on release.

Anticipation: The press IS the anticipation. Response should be immediate - no delay.

Staging: Response originates from interaction point. Ripples expand from tap location.

Straight Ahead vs Pose-to-Pose: Define rest, pressed, and released poses. Transitions flow between them.

Follow Through & Overlapping: Release animation overshoots rest position. Scale to 1.02, settle to 1.0.

Slow In/Slow Out: Press: instant. Release: ease-out with overshoot cubic-bezier(0.34, 1.56, 0.64, 1).

Arcs: Drag elements follow finger with slight lag on curves. Snapping follows arc to destination.

Secondary Action: Press triggers ripple + scale + shadow change simultaneously.

Timing:

  • Press response: 0-50ms (must feel instant)
  • Release recovery: 150-300ms (can be playful)
  • Ripple expansion: 400-600ms (decorative, can be slower)

Exaggeration: Subtle for press (0.97), playful for release (overshoot 1.03).

Solid Drawing: Pressed state should feel "pushed in" - smaller scale, reduced shadow, shifted color.

Appeal: Gestures should feel physically satisfying. Like pressing a real button.

Timing Recommendations

GesturePress DurationRelease DurationEasing
Tap/Click50ms200msease-out + overshoot
Long Press50ms300msease-out
Drag Start100ms-ease-out
Drag Release-300msspring
Swipe-200-400msease-out
Pinchreal-time300msspring

Implementation Patterns

css
/* Button press */.button {  transition: transform 50ms ease-out;}
.button:active {  transform: scale(0.97);}
/* Release with overshoot */.button:not(:active) {  transition: transform 250ms cubic-bezier(0.34, 1.56, 0.64, 1);}
/* Material ripple */.ripple {  animation: ripple 600ms ease-out forwards;}
@keyframes ripple {  from {    transform: scale(0);    opacity: 0.5;  }  to {    transform: scale(4);    opacity: 0;  }}

Drag Feedback Pattern

javascript
// Smooth drag with slight lagelement.style.transform = `translate(${x}px, ${y}px)`;element.style.transition = 'transform 50ms ease-out';
// Snap back with springelement.style.transition = 'transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1)';element.style.transform = 'translate(0, 0)';

Critical Rule

Gesture responses must be under 100ms to feel connected to the action. Anything slower breaks the direct manipulation illusion. Test on actual touch devices.

Source and attribution

Source:dylantarre/animation-principlesinskills/05-by-animation-type/gesture-responsesat commit8359713

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal