feedback-indicators について
ディズニーのアニメーション12原則を使い、操作確認アニメーションを設計するためのスキルです。成功・エラー表示のタイミング、動き、アクセシビリティ、実装パターンを扱います。
主な機能
- 0112原則に基づくフィードバック指針
- 02種類別のタイミング推奨
- 03成功・エラーの動きのパターン
- 04テキスト表示と動きの軽減への配慮
活用シーン
- 01フォーム検証アニメーションの設計
- 02成功・エラー通知の作成
- 03アクセシブルな保存状態表示の追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill feedback-indicatorsインストール後、Claude Code で/feedback-indicatorsを入力して読み込まれたか確認します。
詳細
フィードバックインジケーターのアニメーション
アクションの確認アニメーションにディズニーの12の原則を適用します。
原則の適用
スクワッシュ&ストレッチ:成功を示すチェックマークは、オーバーシュートするように拡大できます。描画時に縮み、完了時に拡大します。
予備動作:フィードバックを表示する前に、短い予備動作を入れます。確認の前に50msの準備時間を設けます。
演出:フィードバックはアクションが行われた場所に表示します。ボタンにはチェックマーク、フィールドにはバリデーションを表示します。
ストレート・アヘッドとポーズ・トゥ・ポーズ:フィードバックの状態を定義します:ニュートラル → 処理中 → 成功/エラー。
フォロースルーとオーバーラッピング:アイコンをアニメーションさせてから、ラベルを表示します。確認要素の表示に時間差をつけます。
スローイン・スローアウト:成功:イーズアウト(確信を感じさせる登場)。エラー:イーズイン・アウト(揺れが収まります)。
弧:チェックマークは直線ではなく弧を描いて表示します。エラーのX印は自然に交差させます。
二次動作:チェックマークの描画に、色の変化とスケールのバウンスを加えて、豊かなフィードバックにします。
タイミング:
- 即時フィードバック:100~200ms(フォームのバリデーション)
- 成功の確認:300~500ms(チェックマークの描画)
- エラー表示:400ms(揺れ+メッセージ)
- 自動非表示:表示から2000~4000ms後
誇張:成功は祝福する価値があります。スケールを1.2までオーバーシュートさせ、鮮やかな色と確信に満ちた動きを使います。
立体感のある描画:フィードバックアイコンは一目でわかるようにします。100ms以内に認識できるようにします。
魅力:肯定的なフィードバックは、報われたと感じられるものにします。否定的なフィードバックは、罰を与えるのではなく、毅然としたものにします。
タイミングの推奨事項
| フィードバックの種類 | 継続時間 | 自動非表示 | イージング |
|---|---|---|---|
| インラインバリデーション | 150ms | なし | イーズアウト |
| チェックマークの描画 | 400ms | 3000ms | イーズアウト |
| 成功トースト | 300ms | 4000ms | イーズアウト |
| エラーの揺れ | 400ms | なし | イーズイン・アウト |
| エラートースト | 300ms | 6000ms | イーズアウト |
| 保存インジケーター | 200ms | 2000ms | イーズアウト |
実装パターン
/* Checkmark draw */
.checkmark {
stroke-dasharray: 50;
stroke-dashoffset: 50;
animation: draw-check 400ms ease-out forwards;
}
@keyframes draw-check {
to { stroke-dashoffset: 0; }
}
/* Success with scale */
.success-icon {
animation: success 500ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
@keyframes success {
0% { transform: scale(0); opacity: 0; }
60% { transform: scale(1.2); opacity: 1; }
100% { transform: scale(1); opacity: 1; }
}
/* Error shake */
.error-shake {
animation: shake 400ms ease-in-out;
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
20%, 60% { transform: translateX(-6px); }
40%, 80% { transform: translateX(6px); }
}
/* Inline validation */
.field-valid {
animation: valid-pop 200ms ease-out;
}
@keyframes valid-pop {
0% { transform: scale(0.8); opacity: 0; }
100% { transform: scale(1); opacity: 1; }
}
SVGチェックマークのパターン
<svg class="checkmark" viewBox="0 0 24 24">
<circle cx="12" cy="12" r="10" fill="#10B981"/>
<path
class="check-path"
d="M7 13l3 3 7-7"
stroke="white"
stroke-width="2"
fill="none"
/>
</svg>
自動非表示のパターン
// Show success, auto-hide
element.classList.add('success-visible');
setTimeout(() => {
element.classList.remove('success-visible');
element.classList.add('success-hidden');
}, 3000);
主なルール
- フィードバックはアクションから100ms以内に表示する必要があります
- 成功状態:短く祝福し、表示し続けないようにします
- エラー状態:ユーザーが確認するまで表示し続けます
- アクセシビリティのため、アイコンと必ずテキストを併記します
prefers-reduced-motion:状態を即時に切り替え、アニメーションは行いません