アニメーション再生の終了直後にJavaScriptを実行するコードと実行結果

CSSアニメーションの再生が終了したタイミングでJavaScriptの処理を実行するコードと実行結果を紹介します。

概要

CSSアニメーションの再生が完了したタイミングで処理を実行したい場合があります。 CSSアニメーションの完了は animationend イベントで検出できます。
ページ読み込み時にCSSアニメーションの要素にanimationend イベントのイベントリスナーを設定して実装します。

プログラム例

コード

下記のHTMLファイルを作成します。

PlayComplete.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <link rel="stylesheet" href="PlayComplete.css" />
  <script type="text/javascript">
    window.addEventListener('load', () => {
      var elem = document.getElementById('img01');
      elem.addEventListener('animationend', () => {
        var outelem = document.getElementById('output');
        outelem.innerText = "アニメーションの再生が終了しました。";
      });
    });

    function startAnimation() {
      var elem = document.getElementById('img01');
      elem.classList.add("charmove");
    }
  </script>
</head>
<body>
  <div>
    <a href="javascript:startAnimation();">start</a>
  </div>
  <img id="img01" class="charimg" src="char.svg" />
  <div id="output"></div>
</body>
</html>

PlayComplete.css
.charimg {
  width:120px;
}

  .charimg.charmove {
    animation: charrotate 2s linear;
    animation-fill-mode: forwards;
  }

@keyframes charrotate {
  0% {
    transform: rotate(0px);
  }

  100% {
    transform: rotate(270deg);
  }
}

解説

[start]リンクのクリックでアニメーションを再生します。

    <a href="javascript:startAnimation();">start</a>


アニメーション再生のコードは以下です。詳細はこちらの記事を参照してください。

    function startAnimation() {
      var elem = document.getElementById('img01');
      elem.classList.add("charmove");
    }


animationend イベントのイベントリスナーを設定するコードが以下です。

    window.addEventListener('load', () => {
      var elem = document.getElementById('img01');
      elem.addEventListener('animationend', () => {
        var outelem = document.getElementById('output');
        outelem.innerText = "アニメーションの再生が終了しました。";
      });
    });


window.addEventListener('load' ... ); のコードにより、ページ表示時のloadイベントリスナーを設定します。
loadイベント内でCSSアニメーションの要素を取得し、アニメーションの要素にanimationend イベントリスナーを追加しています。

animationendイベントでは、id="output" の要素に 「アニメーションの再生が終了しました。」のメッセージを表示する動作を実装しています。

      var elem = document.getElementById('img01');
      elem.addEventListener('animationend', () => {
        var outelem = document.getElementById('output');
        outelem.innerText = "アニメーションの再生が終了しました。";
      }


アニメーションが終了すると、画面下部の id="output" の要素に「アニメーションの再生が終了しました。」のテキストが表示される動作となります。

CSSのアニメーション設定は下記のコードです。2秒間のアニメーションで、キーフレームのcharrotateを指定してアニメーションを再生します。 animation-fill-mode: forwards;が設定されているため、アニメーションの再生完了は初期状態に戻らず最後のフレームの状態のままアニメーションが止まります。

詳しくはこちらの記事を参照してください。

  .charimg.charrotate {
    animation: moveframe 2s linear;
    animation-fill-mode: forwards;
  }


charrotateキーフレームの設定が以下です。270度要素を回転させるアニメーションです。

@keyframes charrotate {
  0% {
    transform: rotate(0px);
  }

  100% {
    transform: rotate(270deg);
  }
}

実行結果

上記のHTTMLファイルをWebブラウザで表示します。下図のページが表示されます。
アニメーション再生の終了直後にJavaScriptを実行するコードと実行結果:画像1

[start]リンクをクリックします。画像の回転アニメーションが始まります。
アニメーション再生の終了直後にJavaScriptを実行するコードと実行結果:画像2

画像が270度回転するとアニメーションが終了し、ページの下部に「アニメーションの再生が終了しました。」のメッセージが表示されます。
アニメーション再生の終了直後にJavaScriptを実行するコードと実行結果:画像3


アニメーションの再生完了のタイミングで処理を実行できました。


このページのキーワード
  • アニメーション再生の終了直後にJSを実行するコードと実行結果
AuthorPortraitAlt
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。 最近は生成AIの画像生成の沼に沈んでいる。
作成日: 2022-05-06
Copyright © 1995–2025 iPentec all rights reserverd.