HTML5 ビデオの終了検知をマスター! 動画の終わりにアクションを起こせる魔法のテクニック

2024-05-17

HTML5 ビデオの終了検知:わかりやすい日本語解説

ended イベントは、HTML5 ビデオ要素の再生が完了したときに発生するイベントです。このイベントを利用することで、動画終了後の処理を記述することができます。

コード例:

<video id="myVideo" width="320" height="240">
  <source src="https://example.com/video.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>

<script>
  const video = document.getElementById('myVideo');

  video.addEventListener('ended', () => {
    console.log('動画が終了しました!');
    // 動画終了後の処理を記述
  });
</script>

解説:

  1. video 変数に、ID myVideo で指定されたHTML5 ビデオ要素を取得します。
  2. addEventListener メソッドで、ended イベントにイベントリスナーを登録します。
  3. イベントリスナー内の関数では、console.log でメッセージを出力しています。この部分を、動画終了後の処理に置き換えてください。

注意点:

  • ended イベントは、動画の自然な終了時のみ発生します。シークバー操作や手動停止による終了には対応しません。
  • ブラウザによっては、ended イベントが発生しない場合があります。

timeupdate イベントと currentTime プロパティ

timeupdate イベントは、HTML5 ビデオの再生時間が更新されるたびに発生するイベントです。currentTime プロパティは、動画の現在の再生時間を取得することができます。これらの要素を組み合わせることで、動画の終了を検知することができます。

<video id="myVideo" width="320" height="240">
  <source src="https://example.com/video.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>

<script>
  const video = document.getElementById('myVideo');
  const duration = video.duration; // 動画の総再生時間

  video.addEventListener('timeupdate', () => {
    if (video.currentTime >= duration) {
      console.log('動画が終了しました!');
      // 動画終了後の処理を記述
    }
  });
</script>
  1. duration 変数に、video.duration で動画の総再生時間を取得します。
  2. timeupdate イベントにイベントリスナーを登録します。
  3. イベントリスナー内の関数では、video.currentTime で現在の再生時間を取得し、duration と比較します。
  • timeupdate イベントは、動画再生中に頻繁に発生するため、処理負荷が高くなる可能性があります。
  • ブラウザによっては、duration プロパティが正確な値を返さない場合があります。

HTML5 ビデオの終了検知は、ended イベントと timeupdate イベントの2つの方法で実現できます。それぞれの方法にはメリットとデメリットがあるため、目的に合った方法を選択してください。




    HTML5 ビデオ終了検知:サンプルコード集

    動画終了後に別の動画を再生する

    <video id="myVideo1" width="320" height="240">
      <source src="https://example.com/video1.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <video id="myVideo2" width="320" height="240" style="display: none;">
      <source src="https://example.com/video2.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <script>
      const video1 = document.getElementById('myVideo1');
      const video2 = document.getElementById('myVideo2');
    
      video1.addEventListener('ended', () => {
        video2.style.display = 'block';
        video2.play();
      });
    </script>
    

    説明:

    1. 2つのHTML5 ビデオ要素を用意します。myVideo1 は最初の動画、myVideo2 は2番目の動画です。
    2. video1ended イベントで、video2 を表示して再生します。

    動画終了後にメッセージを表示する

    <video id="myVideo" width="320" height="240">
      <source src="https://example.com/video.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <div id="message" style="display: none;">動画が終了しました!</div>
    
    <script>
      const video = document.getElementById('myVideo');
      const message = document.getElementById('message');
    
      video.addEventListener('ended', () => {
        message.style.display = 'block';
      });
    </script>
    
    1. 動画終了後に表示するメッセージ用の要素を用意します。

    動画終了後にフォームを表示する

    <video id="myVideo" width="320" height="240">
      <source src="https://example.com/video.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <form id="myForm" style="display: none;">
      </form>
    
    <script>
      const video = document.getElementById('myVideo');
      const form = document.getElementById('myForm');
    
      video.addEventListener('ended', () => {
        form.style.display = 'block';
      });
    </script>
    

    動画終了後にAjaxリクエストを送信する

    <video id="myVideo" width="320" height="240">
      <source src="https://example.com/video.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <script>
      const video = document.getElementById('myVideo');
    
      video.addEventListener('ended', () => {
        const xhr = new XMLHttpRequest();
        xhr.open('POST', 'https://example.com/');
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onload = () => {
          if (xhr.status === 200) {
            console.log('Ajaxリクエストが成功しました!');
          } else {
            console.error('Ajaxリクエストが失敗しました。');
          }
        };
        xhr.send('data=video_ended');
      });
    </script>
    
    1. 動画終了後にAjaxリクエストを送信します。この例では、https://example.com/ にダミーのURLを指定していますが、実際には目的に合ったURLに変更してください。

    これらのサンプルコードはあくまでも一例であり、目的に合わせて自由にカスタマイズすることができます。

    • 上記のコード例は、基本的な動作のみを示しています。実用的なアプリケーションでは、エラー処理



    HTML5 ビデオ終了検知:その他の方法

    play() メソッドは、HTML5 ビデオの再生を開始するメソッドです。このメソッドが終了すると、動画が終了したことを意味します。ただし、この方法はブラウザによっては動作しない場合があります。

    <video id="myVideo" width="320" height="240">
      <source src="https://example.com/video.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <script>
      const video = document.getElementById('myVideo');
    
      video.play().then(() => {
        console.log('動画が終了しました!');
        // 動画終了後の処理を記述
      });
    </script>
    

    durationchange イベントは、HTML5 ビデオの総再生時間が変更されたときに発生するイベントです。このイベントを利用することで、動画の総再生時間を取得し、timeupdate イベントと同様に終了検知を行うことができます。

    <video id="myVideo" width="320" height="240">
      <source src="https://example.com/video.mp4" type="video/mp4">
      Your browser does not support the video tag.
    </video>
    
    <script>
      const video = document.getElementById('myVideo');
      let duration;
    
      video.addEventListener('durationchange', () => {
        duration = video.duration;
      });
    
      video.addEventListener('timeupdate', () => {
        if (video.currentTime >= duration) {
          console.log('動画が終了しました!');
          // 動画終了後の処理を記述
        }
      });
    </script>
    

    サードパーティライブラリ

    HTML5 ビデオの終了検知をより簡単に実装したい場合は、サードパーティライブラリを利用することができます。

    これらのライブラリは、ended イベントやその他のイベントをより簡単に処理できるよう、様々な機能を提供しています。

    注意事項

    • 上記のコード例はあくまでも例であり、実用的なアプリケーションでは、エラー処理やブラウザ互換性などを考慮する必要があります。
    • HTML5 ビデオの仕様は、ブラウザによって異なる場合があります。

    html html5-video


    JavaでHTMLタグを削除:正規表現、HTMLParser、Jsoup、Stream APIを徹底比較

    正規表現HTMLParserJsoupそれぞれの特徴とメリット・デメリットを説明し、サンプルコードも紹介します。正規表現は、パターンマッチングに特化した強力なツールです。HTMLタグの構造を正規表現で記述することで、効率的に削除することができます。...


    HTML、CSS、width を使って残りの水平スペースを埋める div を作成する方法

    このチュートリアルでは、HTML、CSS、width プロパティを使用して、残りの水平スペースを埋める div を作成する方法について説明します。必要なものテキストエディタウェブブラウザ手順新しい HTML ファイルを作成し、以下のコードを追加します。...


    JavaでHTTPリクエストを簡単に行う:ベストプラクティスとライブラリ

    java. net. HttpURLConnection を使用するこれは、Java 1.1 から利用可能な伝統的な方法です。基本的な手順は以下の通りです。URL オブジェクトを作成: 送信したい URL を URL クラスを使用してオブジェクトに変換します。...


    positionプロパティを使ってdivを重ねる

    この方法は、親要素を基準にして子要素の位置を調整する方法です。手順親要素に position: relative を指定します。子要素の top、right、bottom、left プロパティを使って、親要素に対する位置を調整します。例この例では、#child は #parent の左上から10pxの位置に重ねられます。...


    クリックされた要素を自在に操る!JavaScript、jQuery、HTMLのテクニック徹底解説

    このチュートリアルでは、JavaScript、jQuery、HTMLを使用して、ドキュメント全体でクリックされた要素を取得する方法について説明します。それぞれの方法について、わかりやすい説明とコード例を提供します。JavaScript以下のコードは、documentオブジェクトのaddEventListener()メソッドを使用して、clickイベントリスナーをドキュメント全体に追加します。このリスナーは、ドキュメント内の任意の要素がクリックされたときに呼び出されます。...