Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
dylantarre avatar

Loaders Spinners

  • 319 installs
  • 68 repo stars
  • Updated December 30, 2025
  • dylantarre/animation-principles

Design loaders and spinners that communicate progress and system status during waits without causing layout shift, anxiety, or ambiguous endless spinning.

About

Covers principles for loaders and spinners that make waiting understandable and calm. Compares indeterminate spinners, determinate bars, and skeleton screens; defines loop cadence, size, and placement; and ties motion to real async milestones so users know work is happening, layouts stay stable, and reduced-motion users still receive clear status.

  • Spinner versus skeleton selection
  • Indeterminate versus determinate states
  • Layout-stable loading placeholders
  • Accessible status messaging
  • Loop timing that feels calm not frantic

Loaders Spinners by the numbers

  • 319 all-time installs (skills.sh)
  • Ranked #778 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dylantarre/animation-principles --skill loaders-spinners

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs319
repo stars68
Last updatedDecember 30, 2025
Repositorydylantarre/animation-principles

What it does

Design loaders and spinners that communicate progress and system status during waits without causing layout shift, anxiety, or ambiguous endless spinning.

Files

SKILL.mdMarkdownGitHub ↗

Loader & Spinner Animation Principles

Apply Disney's 12 principles to loading indicators for engaging, informative wait experiences.

Principles Applied to Loaders

1. Squash & Stretch

Bouncing dot loaders should squash on landing, stretch while rising. Creates life-like, playful motion.

2. Anticipation

Before progress completes, bar can briefly pause or slow. Spinners can decelerate before stopping. Signals completion coming.

3. Staging

Loader should be clearly visible but not block content unnecessarily. Skeleton screens stage where real content will appear.

4. Straight Ahead & Pose to Pose

Organic loaders (bouncing dots) benefit from straight-ahead. Progress bars use pose-to-pose (0% to 100% keyframes).

5. Follow Through & Overlapping Action

Multi-part loaders should have elements offset in timing. Dot 1 bounces, dot 2 follows 100ms later. Creates rhythm.

6. Ease In & Ease Out

Spinning: use ease-in-out per rotation cycle or linear for continuous. Bouncing: ease-in up, ease-out down.

7. Arcs

Orbital loaders should follow true circular arcs. Bouncing elements follow parabolic arcs like real physics.

8. Secondary Action

While spinner rotates (primary), glow pulses (secondary). Skeleton shimmer is secondary to skeleton shape.

9. Timing

  • Spinner full rotation: 800-1200ms
  • Bounce cycle: 500-800ms
  • Skeleton shimmer: 1500-2500ms
  • Progress bar smooth updates: 200ms
  • Dot stagger: 100-150ms
  • Pulse: 1000-2000ms

10. Exaggeration

Playful brands can use bouncy, elastic loaders. Professional contexts need subtle, smooth spinners. Match brand energy.

11. Solid Drawing

Maintain consistent stroke widths. Circular paths should be true circles. Progress bars should fill evenly.

12. Appeal

Engaging loaders reduce perceived wait time. Boring spinners feel slower. A delightful loader can turn frustration into momentary joy.

CSS Implementation

.spinner {
  animation: spin 1000ms linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

.bounce-dot {
  animation: bounce 600ms ease-in-out infinite alternate;
}

.bounce-dot:nth-child(2) { animation-delay: 100ms; }
.bounce-dot:nth-child(3) { animation-delay: 200ms; }

@keyframes bounce {
  from { transform: translateY(0) scaleY(1); }
  to { transform: translateY(-20px) scaleY(0.9); }
}

.skeleton {
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 200% 100%;
  animation: shimmer 2000ms infinite;
}

@keyframes shimmer {
  to { background-position: -200% 0; }
}

Key Properties

  • transform: rotate, translateY, scale
  • animation: infinite loops
  • background-position: shimmer effects
  • stroke-dashoffset: SVG spinners
  • opacity: pulsing effects

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.