Skip to main content

JavaScript animation example

JavaScript Progress Animation: Circular Upload Ring

Circular progress fits where a bar will not: avatars, upload buttons, cards. This ring fills with a gradient arc whose leading edge glows, the number in the middle counts up smoothly, and at 100% the upload arrow morphs into a checkmark and the ring pulses once. Set the progress input from your upload callback.

  • 4.4 KB file
  • 5 live inputs
  • JavaScript runtime
Live, try it

How this upload progress ring works

  • The displayed value chases the progress input, so irregular network updates still animate smoothly.
  • The arc uses a conic-style gradient approximation with a glowing cap at its leading end.
  • Crossing 100 morphs the arrow into a check and fires "complete".

Add it to your JavaScript app

Install exodeui-vanilla, download the file below, and paste this. The code updates as you customize. Other runtimes are in the other tabs.

import { ExodeUICanvas } from 'exodeui-vanilla';

// <canvas id="javascript-progress-ring" style="width: 100%; height: 460px"></canvas>
const player = new ExodeUICanvas({
  element: '#javascript-progress-ring',
  fit: 'Layout',
  onReady: (engine) => { },
  onTrigger: (name) => {
    // fires: 'complete'
  },
});
player.load(await (await fetch('/javascript-progress-ring.exode')).json());
player.play();

Inputs

InputTypeDefaultRange
progressNumber450 – 100
fileTextbrand-assets.zip—
accentText#8b5cf6hex colour
accent2Text#06b6d4hex colour
bgText#0b0b12hex colour

Events: complete

More JavaScript animations

The same idea in other frameworks: React orbit loader · Flutter bouncing bars loader · Flutter stepped progress bar