
【JavaScript入門】.animate()によるアニメーション
ここでは、.animate() メソッドを利用したアニメーション実装について解説します。従来の setInterval() や requestAnimationFrame() と異なり、.animate() は宣言的にキー フレームを指定して、要素のスタイルの変化を連続的に表現する新しい手法です。Animationオブジェクトを返すため、再生、停止、逆再生などの操作も容易に行えます。以下では、.animate() の基本構文や各種プロパティの指定方法、さらには具体的なサンプルコードを用いて解説を進めます。

1..animate() メソッドの基本
1.1. .animate() メソッドの概要と構文
.animate() メソッドは、要素に対してスタイルの変化を指定し、一定時間かけてアニメーションさせることができるメソッドです。主な使い方は、第1引数に変化させるスタイル設定、またはキー フレームの配列、第2引数に変化時間や遅延、イージングなどのオプションを指定します。以下の表は、.animate() メソッドに関する基本情報をまとめたものです。
メソッド | 説明 |
---|---|
.animate(a, b) | 変化させるスタイル設定 a と、タイミングなどの詳細設定 b を指定し、要素にアニメーションを適用する。Animationオブジェクトを返す。 |
また、.animate() には以下の 2 つの構文があります。どちらの場合も、配列の順番に基づいてスタイルが変化します。
【構文1】
element.animate([
{ スタイル名: 値, スタイル名: 値 },
{ スタイル名: 値, スタイル名: 値 },
{ スタイル名: 値, スタイル名: 値 }
], オプション);
【構文2】
element.animate({
スタイル名: [➀値, ➁値, ➂値],
スタイル名: [➀値, ➁値, ➂値]
}, オプション);
1.2. アニメーション設定の主要プロパティ
アニメーションの動作に影響する設定項目には、以下のものがあります。各プロパティの意味は次の通りです。
プロパティ | 説明 |
---|---|
delay | アニメーション開始前の待機時間(ミリ秒)。 |
duration | アニメーションを実行する時間(ミリ秒)。 |
easing | アニメーションの進行カーブ(動きの滑らかさ)の指定。 |
endDelay | アニメーション終了後に待機する時間(ミリ秒)。 |
また、イージングの設定については、以下の表に示す通りです。
easing の値 | 説明 |
---|---|
ease | 開始と完了が滑らか。 |
linear | 一定の速度で変化。 |
ease-in | ゆっくり開始。 |
ease-out | ゆっくり終了。 |
ease-in-out | 両端がゆっくりで、中間は速い。 |
Animationオブジェクトは、以下のプロパティやメソッドを持っており、アニメーションの状態管理や制御に利用できます。
プロパティ | 説明 |
---|---|
.currentTime | アニメーションの現在時刻(ミリ秒)。 |
.finished | アニメーション終了時に解決される Promise。 |
.onfinish | 終了イベントに対するハンドラーを設定可能。 |
メソッド | 説明 |
---|---|
.play() | アニメーションの再生または再開を行う。 |
.pause() | 再生を一時停止する。 |
.reverse() | アニメーションを逆再生する。 |
.finish() | 変化を強制的に終了させる。 |
.cancel() | アニメーションをキャンセルし、再生を停止する。 |
2.サンプルプログラムの実装と動作解説
2.1. HTML と CSS の設定
以下は、サンプルプログラム「animateDemo.html」の全文です。タイトル部分には絵文字を含み、画面上に中央に配置された box 要素をアニメーションさせます。初期状態では四角形の box が表示され、JavaScript によって順次アニメーション処理が実行されます。
ファイル名: animateDemo.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>🎬 .animate()によるアニメーション入門</title>
<style>
/* ページ全体の基本設定 */
body {
font-family: Arial, sans-serif;
background: #f2f2f2;
margin: 20px;
text-align: center;
}
/* アニメーション対象のボックス */
#box {
width: 150px;
height: 150px;
background-color: #3498db;
margin: 50px auto;
border-radius: 0px;
position: relative;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
// STEP 1: 非同期関数内でアニメーション処理を実施
async function runAnimation() {
const box = document.querySelector('#box');
// アニメーション①: 四角形から丸に変化しながら回転し、元の四角形に戻る
await box.animate({
borderRadius: ['0px', '50px', '0px'],
transform: ['scale(1)', 'rotate(720deg) scale(1.2)', 'scale(1)']
}, 1500).finished;
// アニメーション②: 上方向への移動と背景色の変化
await box.animate([
{ top: '0px', backgroundColor: '#3498db' },
{ top: '-100px', backgroundColor: '#e74c3c' },
{ top: '0px', backgroundColor: '#3498db' }
], {
delay: 250, // 250ミリ秒の遅延
duration: 750, // 750ミリ秒で変化
easing: 'ease-in-out', // 緩やかな始動と終了
endDelay: 250 // 終了後に250ミリ秒の待機
}).finished;
// STEP 3: アニメーションの再実行(連続アニメーション)
runAnimation();
}
// 初回アニメーション実行
runAnimation();
</script>
</body>
</html>
2.2. プログラムの解説と出力例
プログラム解説
このサンプルプログラムは、以下のような動作をします。
- 初期状態
ページ中央には青色の四角形(#box)が表示されています。 - アニメーション①
最初のアニメーションでは、box 要素のborder-radius
が 0px から 50px に変化して丸みを帯び、同時にtransform
で 720 度の回転と拡大(scale(1.2))が行われます。これにより、四角形が一瞬丸くなって回転し、元の四角形に戻る動作が実現されます。所要時間は 1500 ミリ秒です。 - アニメーション②
続いて、box 要素が上方向(top プロパティ)に移動し、背景色が青から赤に変化した後、再び元に戻る動作が実行されます。ここでは、250ミリ秒の遅延、750ミリ秒の変化、そして 250ミリ秒の終了後の待機が設定されています。イージングに "ease-in-out" を指定し、滑らかな動作となっています。 - 連続再実行
両方のアニメーションが完了すると、runAnimation() 関数が再帰的に呼び出され、アニメーションがループ再生されます。
ブラウザの出力例

まとめ
ここでは、.animate() メソッドを用いたアニメーションの基本概念と、主要な設定項目について解説しました。
- まず、.animate() は配列またはオブジェクト形式でキー フレームを指定し、変化の順序に沿ってスタイルを更新します。
- 次に、delay、duration、easing、endDelay などのプロパティを用いることで、アニメーションのタイミングや動作の滑らかさを細かく制御できます。
- さらに、Animationオブジェクトを返すことで、.play()、.pause()、.reverse() などのメソッドを通じた柔軟な制御が可能です。
今回のサンプルプログラム「animateDemo.html」では、四角形の box が形状変化・回転・移動・色変化を連続して実施する様子を確認でき、.animate() を利用した宣言的アプローチの基本的な使い方を理解するための良い例となります。