CSSで画像をアニメーションさせてみよう(3)動きの速度を変える
普段利用しているウェブサイトやSNSでは、目を引く視覚効果、滑らかなアニメーションがふんだんに用いられています。
CSSを使うと、静止画像を、簡単なアニメーションに仕立て上げることができます。
この記事では、CSSの設定を変えて、自動で作られるアニメーションの動作(速度)を変えてみます。
サンプルの確認
以下で、サンプルの動作を確認することができます。
じっくり見比べてみてください。サンプルでは、同じ画像が、4つ、同じ幅で左右に移動するようにアニメーション表示されます。
違うのは動作の速さの変化です。
1つ目:「最初はゆっくり動き始めるが、途中速く。最後はまたゆっくり」
2つ目:「動作の最初から最後まで、同じ速さで動く」
3つ目:「最初は遅く。後から速く」
4つ目:「最初は速く。後からゆっくり」
アプリとソースコードのインポート
以下のボタンをクリックすると、Monaca Educationにプロジェクトをインポートできます。
Monaca Educationにインポートする(要ログイン)
CSSのポイント:キーフレームの定義
CSSでアニメーションを作るには、まず、キーフレームを定義します。
@keyframes animateImageSlide {
/* 開始時点 */
0% {
transform: translateX(0);
}
/* 中間1 */
25% {
transform: translateX(100px);
}
/* 中間2 */
50% {
transform: translateX(0);
}
/* 中間3 */
75% {
transform: translateX(-100px);
}
/* 終了時点 */
100% {
transform: translateX(0);
}
}
アニメーションの動作は4種類ありますが、キーフレームは1つだけです。
詳細はこのあと説明しますが、先にヒントを示すと、「Webブラウザが計算して作り出す、フレームとフレームの間の動きの速さ」は、キーフレームの外の設定で変更するのです。同じキーフレームでも、違う設定をすることにより、動作を変えられます。
キーフレームの指定
定義したキーフレームを、HTMLの中の特定の要素の表示のスタイルに指定することで、アニメーションするようになります。
以下のコードでは、HTMLの中のID属性がimg1である要素に、キーフレームanimateImageSlideを指定しています。
#img1 {
width: 100px;
/* 画像にアニメーションを適用。easeで、ゆっくり-速く-ゆっくり */
animation: animateImageSlide 10s infinite ease;
}
属性animationのオプション
HTMLの中の特定の要素に、キーフレームを指定する際、オプションを指定することで、アニメの動作の詳細を変えることができます。
1つ目の画像を表示するに当たって、次のようにCSSを指定しています。
#img1 {
width: 100px;
/* 画像にアニメーションを適用。easeで、ゆっくり-速く-ゆっくり */
animation: animateImageSlide 10s infinite ease;
}
属性animationの最後に、”ease”という指定があります。これにより、「最初はゆっくり動き始めるが、途中速く。最後はまたゆっくり」という動作を実現しています。
2つ目の画像を表示するに当たって、次のようにCSSを指定しています。
#img2 {
width: 100px;
/* 画像にアニメーションを適用。linearで、いつも同じ速さ */
animation: animateImageSlide 10s infinite linear;
}
属性animationの最後に、”linear”という指定があります。これにより、「動作の最初から最後まで、同じ速さで動く」という動作を実現しています。
3つ目の画像を表示するに当たって、次のようにCSSを指定しています。
#img3 {
width: 100px;
/* 画像にアニメーションを適用。ease-inで、最初遅く、後で速く */
animation: animateImageSlide 10s infinite ease-in;
}
属性animationの最後に、”ease-in”という指定があります。これにより、「最初は遅く。後から速く」という動作を実現しています。
4つ目の画像を表示するに当たって、次のようにCSSを指定しています。
#img4 {
width: 100px;
/* 画像にアニメーションを適用。ease-outで、最初速く、後で遅く */
animation: animateImageSlide 10s infinite ease-out;
}
属性animationの最後に、”ease-out”という指定があります。これにより、「最初は速く。後からゆっくり」という動作を実現しています。
その他のさまざまなオプション
次のリンク先のページには、属性animationに指定できるさまざまなオプションが、動作のサンプルとともに紹介されています。
https://developer.mozilla.org/ja/docs/Web/CSS/animation
アニメーションの動作が始まるまで、少し時間を空けたり、アニメ表示の前後のスタイルを決めたりすることができます。
CSSで、画像をアニメーションさせてみよう
なお、CSSによるアニメーションについては、このブログ記事の下に他の記事へのリンクがあります。これらの記事も参考にしてください。