原森情報技術研究所 WEBコンテンツ企画・制作・運営・サポート / 兵庫県 神戸市 明石市 /

animation-timing-function

animation-timing-function

animation-timing-functionサンプル

例1

0% , 100% に
width 指定のアニメ

例2

0% , 50% , 100% に width 指定のアニメ

例3

4コマ漫画サンプル。 上二つは「step-start」と「steps(4,start)」の異なる設定で同じ秒数、コマを表示。

例4

水滴っぽい演出

例5

カウントダウンイメージ画像

画像のコマ漫画表示で
カウントダウン

animation-timing-function

[animation-timing-function] はアニメーション全体ではなくキーフレーム間に適用されるアニメの仕方となっています。
webでこの説明を記事にしているページで、比較サンプルを掲載してたりするのを見かけますが、1つのアニメだけでタイミングだけの比較をしている場合が多いので、
案外重要ポイントだと思われる「キーフレーム間」の意味がわかりやすくなるように、同じアニメだけどキーフレーム数が違うサンプルを並べて比較できるようにしてみました。

例1 例2の内容【timing-function記事のお約束の、見比べる実験】

timing-function記事ではお約束の比較サンプルです。他ではみかけないので、キーフレームが異なる場合を実験してみました。
タイミングが【linear】なら同じアニメですが、[-timing-function] の値で、異なる動作になるのが直感できるかと思われます。
【例1】が2sでwidth:0px(0%) → width:240px(100%)に変化を反転繰り返し。
【例2】は2sでwidth:0px(0%) → width:120px(50%) → width:240px(100%)に変化を反転繰り返し。
※ウインドウサイズが小さい時は240pxを180px、120pxを90pxにしています。

例2は間に50%の値があるので、2段階にtiming-functionしてます。
また、例1では0% - 100%で反転繰り返しアニメなので、 step-start や step-end は[終了]が次の[開始]になり、アニメしない印象になってますが、例2の方では50%があるのでちゃんと変化しているのが確認できます。

0% - 100% アニメだけ(例1)で確認すると step-start や step-end がよくわからないかもしれない、などと思ったので、例2の 0%-50%-100% を並べて比較しました。

例1のアニメ設定、キーフレーム設定を表示

例2のアニメ設定、キーフレーム設定を表示

例1へ

例3の内容【コマ漫画風の画像表示】

縦や横に長い画像を作り、マウスホバーで画像の表示位置を変更する手法は、主にボタン画像やメニューの背景画像などによくつかわれるテクニックになっていますが、アニメの「timing-function」に「step」という仕様があるのはまさにこのテクニックでアニメをコマ送り表示するために用意されたものかもしれない、などと思ったりします。

とりあえず、アニメ(キーフレーム)の作り方により、「step-start」や「steps(数値,start)」を指定することでサンプルのようにコマ漫画的に表示するアニメが作れたりします。
企業サイトなら、広告バナーアニメに演出として使う、などが考えられるかと思います。
同じ表示秒数で、計算させて楽に作りたい時は、「steps(数値,start)」(※表示される画像サイズを同じにしてつなげる調整が必要)、各コマの表示秒数を変えて演出したい時は「step-start」を使う、などが考えられるかと思います。

ちなみに、例3のアニメしている画像
サンプル画像
※ガンプラ等でCG作って掲載してた趣味のブログ用に作ったものを加工しています。
※作ったのはかなり昔ですが、富野監督の作劇の本を参考に、MSの位置が入れ替わるようなカメラワークを演出してみたり…。

アニメ設定、キーフレーム設定を表示

1つ目、2つ目は同じアニメに見えますが、アニメの指定方法が異なっています。
[1つ目] はキーフレームの方で 0% 25% 50% 75% 100% のtopの位置を指定し、アニメ設定は 8s step-start で、8sの 0% 25% 50% 75% 100% の秒数時点で step-start (★%になった時点で表示) しているアニメです。
[2つ目] はキーフレームの方は 0% 100% のtopの位置を指定しているだけで、アニメ設定の方で、8s steps(4,start) を設定し、8sを5分割したstart位置で自動的にtopの位置が計算されて表示しているアニメになっています。
※自動的に高さを分割するタイプなので、画像のコマの高さを同じサイズにする必要があります。

例3へ

サンプルの内容【例4 雨の水滴っぽい感じ】

特に意味はないですが「雨の水滴」っぽい演出です。

アニメ設定、キーフレーム設定を表示

例4へ

サンプルの内容【例5 カウントダウンイメージ】

次のページの遅延の項目で一旦作りかけたカウントダウンですが、コマ漫画アニメの方が簡単で、最後だけ少し長めに表示したりの調節がいろいろできるので、コマ漫画アニメの方法でカウントダウンイメージを作ってみました。

例5の画像
カウントダウンイメージ画像

アニメ設定、キーフレーム設定を表示

例5へ

ネタコラム

キーフレームが違うアニメで比較しているweb記事をあまり見かけないので、作ってみた、というのが animation-timing-function のメインの実験ネタとなります。

webでの説明ではアニメの動作指定で @keyframes ta_1{ 0%{}…100%{} } と記述するものをキーフレーム、例の ta_1 をキーフレーム名と呼びますが、このwebではわざとアニメ名などと書いたりしてます。(わかりづらいので)

animation-timing-functionの説明でキーフレームに対して適用されます、の「キーフレーム」は0%{…}や10%{…}などの部分を意図しているかと思いますが、全体もキーフレームなどと呼ぶのでわかりづらいのではないかと思ったりします。(なのでアニメ名とか勝手に呼んでます)
0% と 100%しかない場合は全体を意味してて、変化のタイミングは1回ですが、0% 50% 100% 等の場合は 0% → 50% と 50% → 100% の2回、変化のタイミングが表現されるということになります。

animationのプロパティ

animation-name CLICK
animation-duration CLICK
animation-timing-function CLICK
キーフレームの始まりから終わりまでの間のアニメの仕方を指定
キーフレームのブロック内で定義されたアニメーションタイミング関数は、そのキーフレームに対して適用されます。一方、キーフレームでタイミング関数が指定されていない場合は、アニメーション全体に対して指定されたタイミング関数が使用されます。(引用:[MDN] animation-timing-function )
3次ベジェ曲線で変化を設定。開始点Aと終了点Dは決まってるので、Aからの接線ポイントBやDからの接線ポイントCを指定。
「 A,B,C,D は それぞれA(xa,ya)=A(0,0), D(xd,yd)=D(1.0,1.0)は省略で、
BとCの座標をcubic-bezier(xb,yb,xc,yc)で指定する。
変化量は文字でも可能。
ease = cubic-bezier(0.25, 0.1, 0.25, 1.0) (初期値)
linear = cubic-bezier(0.0, 0.0, 1.0, 1.0)
ease-in = cubic-bezier(0.42, 0, 1.0, 1.0)
ease-out = cubic-bezier(0, 0, 0.58, 1.0)
ease-in-out = cubic-bezier(0.42, 0, 0.58, 1.0)
animation-delay CLICK
animation-iteration-count CLICK
animation-direction CLICK
animation-fill-mode CLICK
animation-play-state CLICK

ページトップへ

top > css3研究 > 
animation-timing-function

例1のアニメ設定

animation:ta_1 2s infinite alternate;
※ -timing-function を省略
※ -timing-function はそれぞれ別のクラスで指定しています

例1のキーフレーム

@keyframes ta_1{
0%{width:0px;}
100%{width:240px;}
}
※ウインドウサイズが小さい場合
@keyframes ta_1{
0%{width:0px;}
100%{width:180px;}
}

例2のアニメ設定

animation:ta_2 2s infinite alternate;
※ -timing-function を省略
※ -timing-function はそれぞれ別のクラスで指定しています

例2のキーフレーム

@keyframes ta_2{
0%{width:0px;}
50%{width:120px;}
100%{width:240px;}
}

linearなら例1と同じ動作
(50%に途中の値があるだけです)
※ウインドウサイズが小さい場合
@keyframes ta_2{
0%{width:0px;}
50%{width:90px;}
100%{width:180px;}
}

例3のアニメ設定

1つ目 animation:ta_3 8s step-start infinite;
2つ目 animation:ta_3b 8s steps(4,start) infinite;

例3のキーフレーム

@keyframes ta_3{
0%{top:-500px;}
25%{top:-375px;}
50%{top:-250px;}
75%{top:-125px;}
100%{top:0px;}
}
@keyframes ta_3b{
0%{top:-500px;}
100%{top:0px;}
}

例4のアニメ設定

1つ目 animation:ta_4a 5s step-start infinite,ta_4b 1s linear infinite;
2つ目 animation:ta_4a 5s step-start 1.4s infinite reverse,ta_4b 1s linear 1.4s infinite normal;

例4のキーフレーム

@keyframes ta_4a{
0%{top:20px;left:20px;}
20%{top:220px;left:120px;}
40%{top:120px;left:250px;}
60%{top:50px;left:100px;}
80%{top:200px;left:230px;}
100%{top:260px;left:200px;}
}
@keyframes ta_4b{
0%{opacity:0;transform:scale(0);}
100%{opacity:1;transform:scale(2);}
}
※ウインドウサイズが小さい場合
@keyframes ta_4a{
0%{top:20px;left:20px;}
20%{top:220px;left:70px;}
40%{top:120px;left:120px;}
60%{top:50px;left:100px;}
80%{top:200px;left:90px;}
100%{top:260px;left:40px;}
}

例5のアニメ設定

animation:ta_5 7s step-start infinite;

例5のキーフレーム

@keyframes ta_5{
0%,10%{top:0px;}
20%{top:-100px;}
30%{top:-200px;}
40%{top:-300px;}
50%{top:-400px;}
60%{top:-500px;}
70%,100%{top:-600px;}
}
update 2015.08.18
カテゴリMENU
お問い合せ