SVGのanimate属性でアニメーションの設定をする際、イージングの指定ができるようだったのでメモ。
サンプルコード
イージングの設定はcalcMode属性をsplineにした上で、keySplines属性を使って指定できます。
<svg width="300" height="500" viewBox="0 0 300 500">
<!-- 設定前 -->
<circle cx="20" cy="50" r="10" fill="red">
<animate
attributeName="cx" attributeType="XML"
from="20" to="220" dur="2s"
repeatCount="indefinite" />
</circle>
<!-- イージングが設定効かない場合 -->
<circle cx="20" cy="100" r="10" fill="blue">
<animate
attributeName="cx" attributeType="XML"
from="20" to="220" dur="2s"
calcMode="spline"
keySplines="0.550, 0.085, 0.680, 0.530"
repeatCount="indefinite" />
</circle>
<!-- イージングが設定できた場合 -->
<circle cx="20" cy="150" r="10" fill="green">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.550, 0.085, 0.680, 0.530"
repeatCount="indefinite" />
</circle>
</svg>
ただ、fromとtoで開始地点と終了地点を指定している場合はうまく効かず、valuesとkeyTimesを使って指定の場合は効くようでした。
イージング設定のデモページ
イージング設定をいくつか試してみます。
<svg width="300" height="500" viewBox="0 0 300 500">
<!-- 設定前 -->
<circle cx="20" cy="50" r="10" fill="red">
<animate
attributeName="cx"
dur="2s"
values="20; 220"
keyTimes="0; 1"
repeatCount="indefinite" />
</circle>
<!-- linear -->
<circle cx="20" cy="100" r="10" fill="blue">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.250, 0.250, 0.750, 0.750"
repeatCount="indefinite" />
</circle>
<!-- easeInQuad -->
<circle cx="20" cy="150" r="10" fill="green">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.550, 0.085, 0.680, 0.530"
repeatCount="indefinite" />
</circle>
<!-- easeOutCubic -->
<circle cx="20" cy="200" r="10" fill="orange">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.215, 0.610, 0.355, 1.000"
repeatCount="indefinite" />
</circle>
<!-- easeInOutQuart -->
<circle cx="20" cy="250" r="10" fill="purple">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.770, 0.000, 0.175, 1.000"
repeatCount="indefinite" />
</circle>
<!-- easeOutBack(動作しない) -->
<circle cx="20" cy="300" r="10" fill="pink">
<animate
attributeName="cx"
dur="2s"
calcMode="spline"
values="20; 220"
keyTimes="0; 1"
keySplines="0.175, 0.885, 0.320, 1.275"
repeatCount="indefinite" />
</circle>
</svg>
keySplinesで使用する値は0〜1の範囲内である必要があるため、最後のeaseOutBackに関してはイージングの設定が効きません(アニメーションが実行されない)。
イージング設定のデモページ2
コメントが承認されるまで時間がかかります。