Webデザイン

【PR】を含みます。

【JavaScript】videoタグにオリジナルの再生ボタンを設置する方法

JavaScript videoタグにオリジナルの再生ボタンを設置する方法

ブラウザによってvideoタグの再生ボタンのデザインが違っていたり、再生ボタンが表示されないことがあるためオリジナルの再生ボタンを設置する方法を解説します。

実務で時々使用するためコピペで実装できるようにまとめました。

前提

videoタグの再生ボタンは、動画のコントロールバーを表示するためのcontrols属性によって表示されます。

しかし、ブラウザによって再生ボタンのデザインが違っていたり、Chromeだと再生ボタンが表示されないなどの差異があります。

この記事では、JavaScript使用して再生停止中はcontrols属性を削除、再生中はcontrols属性を付与して、オリジナル再生ボタンの表示・非表示を制御しています。

【サンプル】videoタグにオリジナルの再生ボタンを設置

再生ボタン

【実装コード】videoタグにオリジナルの再生ボタンを設置

HTML
Copy
  1. <div class="movie">
  2.   <video class="movie_video" src="動画URL" playsinline></video>
  3.   <img class="movie_btn" src="再生ボタン画像URL" alt="再生ボタン">
  4. </div>
CSS
Copy
  1. .movie {
  2.   display: inline-block;
  3.   position: relative;
  4. }
  5.  
  6. .movie_video {
  7.   max-width: 100%;
  8.   height: auto;
  9. }
  10.  
  11. .movie_btn {
  12.   width: 60px;
  13.   height: 60px;
  14.   border-radius: 100%;
  15.   overflow: hidden;
  16.   position: absolute;
  17.   top: 50%;
  18.   left: 50%;
  19.   transform: translate(-50%, -50%);
  20.   cursor: pointer;
  21. }
JavaSctipt
Copy
  1. // 対象のvideoタグを取得
  2. let video = document.querySelectorAll('.movie_video');
  3.  
  4. // フルスクリーン判定
  5. let fullscreenFlag = false;
  6. document.addEventListener('fullscreenchange', handleFullscreenChange);
  7. document.addEventListener('webkitfullscreenchange', handleFullscreenChange); // Safari用
  8. document.addEventListener('mozfullscreenchange', handleFullscreenChange); // 古いFirefox用
  9.  
  10. function handleFullscreenChange() {
  11.   const isFullscreen = document.fullscreenElement ||
  12.                        document.webkitFullscreenElement ||
  13.                        document.mozFullScreenElement;
  14.  
  15.   if (isFullscreen) {
  16.     // フルスクリーン時
  17.     fullscreenFlag = true;
  18.   } else {
  19.     // フルスクリーン解除時
  20.     fullscreenFlag = false;
  21.  
  22.     video.forEach(function(element) {
  23.       if (element.paused) {
  24.         element.removeAttribute('controls', '');
  25.       }
  26.     });
  27.   }
  28. }
  29.  
  30. video.forEach(function(element) {
  31.   // 再生時の処理
  32.   element.addEventListener('playing', function() {
  33.     this.nextElementSibling.style.display = 'none';
  34.     this.setAttribute('controls', '');
  35.   });
  36.  
  37.   // 再生停止時の処理
  38.   element.addEventListener('pause', function() {
  39.     if (!this.seeking) {
  40.       if (!fullscreenFlag) {
  41.         this.removeAttribute('controls', '');
  42.       }
  43.       this.nextElementSibling.style.display = 'block';
  44.     }
  45.   });
  46.  
  47.   // フルスクリーン以外でvideoタグクリック時に、再生されてなければ再生開始
  48.   element.addEventListener('click', function() {
  49.     if (this.paused && !fullscreenFlag) {
  50.       this.play();
  51.     }
  52.   });
  53.  
  54.   // 再生ボタンクリック時に、再生開始
  55.   element.nextElementSibling.addEventListener('click', function() {
  56.     if (this.previousElementSibling.paused) {
  57.       this.previousElementSibling.play();
  58.     }
  59.   });
  60. });

HTMLとCSSの知識がありJavaScriptを学びたいという方におすすめの1冊

アイコン画像

もみじ

HTMLとCSSの知識がありJavaScriptを学びたいという方に入門書としておすすめの書籍です。

実務で役立つサンプルを手を動かしながら学ぶことができ、実践的なスキルを身に付けることができます。

JavaScriptのフロントエンドエンジニアを目指している方におすすめの1冊

アイコン画像

もみじ

この本はJavaScript初心者からフロントエンドエンジニアを目指す方にぴったりの1冊です。

非同期処理やAJAXなど、現代の開発で必要なスキルがわかりやすく解説されており、実務で役立つスキルを学ぶことができます。

-Webデザイン
-, ,