---
name: like-burst
description: |
Add a celebratory particle burst to a like / favorite / reaction button. A delight
micro-interaction that fires on user tap only (never on load), bursts on the "like"
transition (not un-like), and ships a prefers-reduced-motion fallback. Use when a small,
earned moment of positive feedback will feel good — and only one such moment per screen.
triggers:
- "like animation"
- "reaction effect"
- "celebration burst"
- "delightful like"
- "点赞特效"
- "惊喜感"
od:
mode: prototype
surface: web
platform: desktop
category: animation-motion
upstream: null
preview:
type: html
design_system:
requires: false
example_prompt: |
Use the like-burst recipe on the heart button in this page: pop the icon on toggle and
emit a short particle burst on like only, with a prefers-reduced-motion fallback. Keep it
to one celebratory moment on screen.
---
# like-burst
A celebratory particle burst for like / favorite / reaction buttons. Part of
[motion-anything](https://github.com/nexu-io/motion-anything); obeys `MOTION-SPEC.md`.
## When to use it
- Like / favorite / upvote / reaction buttons.
- A small, *earned* moment of positive feedback.
## When NOT to use it (restraint)
- Destructive or neutral actions (delete, dismiss, close).
- When more than one burst could fire at once — **one celebratory moment per screen**.
- On load / autoplay. This must be **user-triggered**.
## How to apply
1. Copy `like-burst.css` and `like-burst.js` into the project.
2. Link them, and mark the button:
```html
```
3. It auto-attaches to any `[data-like-burst]`, or call `attachLikeBurst(el)` manually.
## Tuning
- `PARTICLE_COUNT` / `COLORS` in `like-burst.js` (keep particle count modest — taste over spectacle).
- Pop feel: the `lb-pop` keyframe (currently `420ms`, ease-out). Burst spread: `dist` in `spawnParticles`.
## Accessibility & performance
- Honors `prefers-reduced-motion`: particles are suppressed, a quiet color/scale cue remains.
- Animates `transform`/`opacity` only; removes injected particle nodes after ~700ms.
## Framework notes
- React: call `attachLikeBurst(ref.current)` in `useEffect`; or port the click handler into your
component and keep the CSS as-is.