No.290 · Micro-animations
Download Tray
The arrow drops into the tray while a ring fills with real progress; when it's done a tick appears and the tray bounces.
The prompt
The design brief behind this component — reuse it to regenerate, remix, or explain it.
Build a round download button (56px) with a progress ring. Its icon is an arrow over an open tray. On press, the action is called with a progress callback: while it runs, the arrow repeatedly drops into the tray (translate −6px → 5px, fading in and out, 900ms loop) and a ring around the button (SVG circle, stroke-dashoffset from the circumference) fills with the reported progress. When it resolves, the ring turns green and full, the arrow is replaced by a tick drawing itself in, and the tray does a quick squash-and-stretch bounce from the bottom; after 2.2s it resets. Live progress is announced politely ("Downloading 40%", "Download complete"). The demo fakes the progress.
Notes
- Interaction
- Click, tap, Space or Enter to start; the button shows progress and confirms when done.
- Motion
- Arrow drop loop 900ms; ring follows real progress; tick 360ms; tray bounce 520ms; reset after 2.2s.
- Accessibility
- aria-busy while downloading and a label that changes to "Downloaded"; progress is announced in a status region. Reduced motion removes the looping drop and bounce.
- Responsive
- A fixed-size control that sits inline wherever it's placed; nothing depends on screen width.
- On touch
- Works the same on touch; there's no hover-only behaviour.