loading
circular progress / ring progress
進捗率に応じて円周が描かれていくリング。stroke-dasharrayに円周長を入れ、stroke-dashoffsetを進捗で減らすSVGの定番テクニックで、スキル表示やアップロード進捗まで使い回せる。
02 — Prompt template
03 — Params
duration(描画時間 s) — 範囲 0.4〜3 / 初期 1.5
1〜2sが見せ場として丁度いい。0.5s未満だと描かれる過程が伝わらない。progress(進捗率 %) — 範囲 5〜100 / 初期 72
デモ用の到達値。実装ではデータから算出した値を渡す。
04 — Vocab
circumference(円周長) — 2πr。dasharrayとdashoffsetの計算の基準になる値で、これを間違えると弧が一周しない。
stroke-dashoffset — 破線の開始位置をずらす指定。円周長から進捗分を引いた値にすると「描かれた長さ」を制御できる。
確定(determinate) — 完了までの割合が分かるローディング表現。割合が取れないならリングスピナー等の不確定表現を使う。
pathLength — SVG要素の路長を任意の値(例:100)に正規化する属性。使うとdashoffsetを進捗%そのままで書ける。
05 — NG → OK examples
NG
言い方: 「「進捗を丸いゲージで見せて」」
なぜNG: conic-gradientの角がガタつく実装や、開始位置が3時のまま・先端が角ばったままの弧が返ってくる。dashoffset方式と開始位置・先端処理を指定しないと細部で崩れる。
OK
言い方: 「「circular progressをSVG 2重circle + stroke-dashoffsetで。円周長をdasharrayに設定、-90degで12時始まり、1.5s ease-outで0→72%を描画。linecap round、中央に数値。reduced-motionでは即時表示」」
なぜOK: dashoffsetの計算式・開始位置・時間・先端処理まで指定。「12時始まり」の一言がないと弧は3時から描かれ、途端に素人っぽくなる。
