MOTION HUB

环形进度

Progress Ring
#progress-ring · 45/72
HOVER · 悬停交互

参数调改

PLAYGROUND
进度色 A--ring_a
进度色 B--ring_b
环直径--ring_size
100260
px
环带厚度--ring_w
622
px
填充时长--dur_ms
6004000
ms
底轨颜色--track

实现要点

NOTES
  1. 01

    进度弧 = conic-gradient 从 12 点方向铺到 var(--p),再用 radial-gradient mask 挖掉中心只留环带——不用 SVG stroke-dasharray,纯 CSS 绘制,粗细由 --ring_w 一个变量控制。

  2. 02

    --p 必须用 @property 注册为 <percentage> 才能被 keyframes 插值;环带内的细白高亮线复用同一个 --p 做第二层 conic,端点有光点(box-shadow 辉光)随 rAF 同步旋转到弧末端。

  3. 03

    中心百分比数字由 JS rAF 驱动,与 --p 动画共用同一条 easing 曲线(近似 easeInOutQuad),数字与弧线始终对齐;aria-valuenow 同步更新保证读屏一致。

  4. 04

    重播通过『动画置 none → 强制 reflow → 恢复』重启 CSS 动画,同时 rAF 重跑数字;这是重启已结束的 forwards 动画的标准手法。

  5. 05

    环直径、厚度、字号全部由 --ring_size calc 推导,缩放参数整体联动;底轨是独立的 conic 层,颜色可调。

  6. 06

    reduced-motion:CSS 动画压到 0.01ms,JS 数字直接落终值,环瞬间呈现完整进度。

源代码

SOURCE

加载源代码…