イージング

イージングについて

Startify-UIでは、アニメーションのイージングをデザイントークンの一環として定義しています。イージングは、アニメーションの速度や加速度を調整するための関数であり、アニメーションの挙動をより自然かつ美しいものにするために重要な要素です。

イージングのバリエーション

Startify-UIでは、よく使われる代表的なイージングを提供しています。これらのイージングはCSS変数として定義されており、簡単にイージングを適用することができます。

イージングは直線もしくは曲線のグラフとして表現され、その形状によってlinearやease、ease-inなどの挙動別に分けられます。曲線グラフを元にしたものは同じ挙動の中でも変化率の違いにより、sineやcircle、expoといった曲線タイプに細分化され、どのタイミングで加速・減速が強調されるかが決まります。

加速・減速のタイミングによるイージングの違い

加速・減速のタイミングによるイージングの違いは、以下のようになります。

linear 【等速】 開始から終了まで速度が変わらず、一定ペースで等速進行するイージング
ease 【加減速】 序盤はゆっくり、途中で加速し終盤で滑らかに減速するバランス型のイージング
ease-in 【加速】 動き出しは控えめで徐々に加速し、後半に勢いが増すイージング
ease-out 【減速】 序盤から素早く動き出し、終盤に向けて自然に減速して落ち着くイージング
ease-inout 【加減速】 動き出しは滑らかに加速し、中盤で最大速度に達した後、終盤で再び穏やかに減速するイージング
steps 【ステップ】 滑らかな動きではなく、指定した回数に分割して段階的に進む、コマ送りのようなイージング

加速度によるイージングの違い

等速・ステップ以外のイージングについては加速度を表現した曲線の種類により、どれだけ急激に加速・減速するかが変化します。以下は代表的な変化率ごとの特徴です。

sine 【変化率:弱】 正弦曲線に基づき、始まりと終わりが滑らかにつながる穏やかな変化率
quad 【変化率:中】 二次曲線に基づき、比較的柔らかい加速と減速を持つベーシックな変化率
cubic 【変化率:強】 三次曲線に基づき、quadよりもメリハリのある加速と減速を生む変化率
quart 【変化率:強】 四次曲線に基づき、開始直後と終了直前の加減速がさらに鋭くなる変化率
quint 【変化率:強】 五次曲線に基づき、非常に急峻な加減速で強いアクセントを付ける変化率
expo 【変化率:強】 指数関数曲線に基づき、序盤は極めて緩やかで終盤に向けて急激に変化する変化率
circ 【円弧】 円弧曲線に基づき、自然な弧を描きながら滑らかに加速し終盤で急制動する変化率
back 【反動】 戻りを伴う曲線に基づき、一度目標を行き過ぎてから柔らかく戻り、弾むような動きを生む変化率

イージング一覧

各イージングの変化率を表現した曲線グラフと、そのイージングを適用したアニメーションの挙動を確認することができます。

  • linear
  • ease
  • ease-in
  • ease-out
  • ease-inout
  • ease-in-sine
  • ease-out-sine
  • ease-inout-sine
  • ease-in-quad
  • ease-out-quad
  • ease-inout-quad
  • ease-in-cubic
  • ease-out-cubic
  • ease-inout-cubic
  • ease-in-quart
  • ease-out-quart
  • ease-inout-quart
  • ease-in-quint
  • ease-out-quint
  • ease-inout-quint
  • ease-in-expo
  • ease-out-expo
  • ease-inout-expo
  • ease-in-circ
  • ease-out-circ
  • ease-inout-circ
  • ease-in-back
  • ease-out-back
  • ease-inout-back
  • steps-2
  • steps-4
  • steps-5
  • steps-8
  • steps-10

イージング用CSS変数

Startify-UIで提供されているイージング用のCSS変数は、以下のとおりです。

--su-easing-linear linearのイージングが適用されます
--su-easing-ease easeのイージングが適用されます
--su-easing-ease-in ease-inのイージングが適用されます
--su-easing-ease-out ease-outのイージングが適用されます
--su-easing-ease-inout ease-inoutのイージングが適用されます
--su-easing-ease-in-sine cubic-bezier(0.47, 0, 0.745, 0.715)のイージングが適用されます
--su-easing-ease-out-sine cubic-bezier(0.39, 0.58, 0.57, 1)のイージングが適用されます
--su-easing-ease-inout-sine cubic-bezier(0.445, 0.05, 0.55, 0.95)のイージングが適用されます
--su-easing-ease-in-quad cubic-bezier(0.55, 0.085, 0.68, 0.53)のイージングが適用されます
--su-easing-ease-out-quad cubic-bezier(0.25, 0.46, 0.45, 0.94)のイージングが適用されます
--su-easing-ease-inout-quad cubic-bezier(0.455, 0.03, 0.515, 0.955)のイージングが適用されます
--su-easing-ease-in-cubic cubic-bezier(0.55, 0.055, 0.675, 0.19)のイージングが適用されます
--su-easing-ease-out-cubic cubic-bezier(0.215, 0.61, 0.355, 1)のイージングが適用されます
--su-easing-ease-inout-cubic cubic-bezier(0.645, 0.045, 0.355, 1)のイージングが適用されます
--su-easing-ease-in-quart cubic-bezier(0.895, 0.03, 0.685, 0.22)のイージングが適用されます
--su-easing-ease-out-quart cubic-bezier(0.165, 0.84, 0.44, 1)のイージングが適用されます
--su-easing-ease-inout-quart cubic-bezier(0.77, 0, 0.175, 1)のイージングが適用されます
--su-easing-ease-in-quint cubic-bezier(0.755, 0.05, 0.855, 0.06)のイージングが適用されます
--su-easing-ease-out-quint cubic-bezier(0.23, 1, 0.32, 1)のイージングが適用されます
--su-easing-ease-inout-quint cubic-bezier(0.86, 0, 0.07, 1)のイージングが適用されます
--su-easing-ease-in-expo cubic-bezier(0.95, 0.05, 0.795, 0.035)のイージングが適用されます
--su-easing-ease-out-expo cubic-bezier(0.19, 1, 0.22, 1)のイージングが適用されます
--su-easing-ease-inout-expo cubic-bezier(1, 0, 0, 1)のイージングが適用されます
--su-easing-ease-in-circ cubic-bezier(0.6, 0.04, 0.98, 0.335)のイージングが適用されます
--su-easing-ease-out-circ cubic-bezier(0.075, 0.82, 0.165, 1)のイージングが適用されます
--su-easing-ease-inout-circ cubic-bezier(0.785, 0.135, 0.15, 0.86)のイージングが適用されます
--su-easing-ease-in-back cubic-bezier(0.6, -0.28, 0.735, 0.045)のイージングが適用されます
--su-easing-ease-out-back cubic-bezier(0.18, 0.89, 0.32, 1.28)のイージングが適用されます
--su-easing-ease-inout-back cubic-bezier(0.68, -0.55, 0.27, 1.55)のイージングが適用されます
--su-easing-steps-2 steps(3, jump-none)のイージングが適用されます
--su-easing-steps-4 steps(5, jump-none)のイージングが適用されます
--su-easing-steps-5 steps(6, jump-none)のイージングが適用されます
--su-easing-steps-8 steps(9, jump-none)のイージングが適用されます
--su-easing-steps-10 steps(11, jump-none)のイージングが適用されます

これらのCSS変数は、プロパティの値で使用したり、スクリプト側で値を参照することができます。

animation-timing-function: var(--su-easing-ease-in-sine);
const easingElement = document.getElementById('easing');
if (easingElement) {
  const easingValue = getComputedStyle(easingElement)
    .getPropertyValue('--su-easing-ease-in-sine')
    .trim();
  easingElement.style.animationTimingFunction = easingValue;
}