ui
error shake / shake animation
フォーム送信に失敗したとき、入力欄が左右に小さく震えて「首を横に振る」ように拒否を伝える動き。translateXの減衰キーフレームで作り、エラー色の変化と必ずセットで使う。震え幅と回数が少し過ぎるだけで不快になる、匙加減が命の演出。
02 — Prompt template
03 — Params
amplitude(震え幅 px) — 範囲 2〜16 / 初期 8
初回の振れ幅。6〜10pxが「拒否」の合図として十分。14pxを超えると怒られている感じになる。duration(震える時間 s) — 範囲 0.2〜1 / 初期 0.4
0.3〜0.5sで振り切る。0.7sを超えると震えが目的化して、エラー内容を読む邪魔になる。shakes(往復回数) — 範囲 2〜6 / 初期 3
左右1往復を1回と数える。3往復が定番。5回以上は同じ時間に詰め込まれて痙攣に見える。
04 — Vocab
減衰(decay) — 振れ幅を回を追うごとに小さくすること。±8→−6→+4→0のように減らすと物理的な揺れに見える。
キーフレーム — アニメーションの通過点の列。シェイクは左右の折り返し位置を並べたキーフレームで定義する。
element.animate() — Web Animations API。JSからキーフレームを渡して再生でき、同じ要素で何度でも撃ち直せるのでシェイク向き。
ネガティブフィードバック — 操作の失敗を伝える応答。動きだけに頼らず色・テキストを併用するのが原則(色覚・reduced-motion対応)。
05 — NG → OK examples
NG
言い方: 「「エラーのときに入力欄をプルプルさせて」」
なぜNG: 幅・回数・減衰が未定義のまま、一定振幅で延々と揺れる過剰な実装が返ってきがち。色やメッセージの併用にも言及しないと「揺れるだけで理由が分からないフォーム」になり、アクセシビリティ的にも落第する。
OK
言い方: 「「error shakeを実装。translateXを±8pxから3往復で減衰、0.4s ease-out、transformのみ。同時にボーダーをエラー色+メッセージ表示、入力再開で解除。reduced-motion時は色とメッセージのみ」」
なぜOK: 振幅・回数・減衰・時間・色との併用・解除条件まで指定。「減衰させる」の一言で機械的な等幅の揺れを防ぎ、物が首を振るような自然な止まり方になる。
