YouTube動画を背景に使用する

YouTube動画を背景に使用する
Image by Jill Wellington from Pixabay

2021.04.08(更新日:2021.04.08)

例えばトップページなどで全面背景で表示されているアイキャッチ的な動画とか。
あれこれ試したけれど、最も簡単な方法が「jquery.mb.YTPlayer」だった。

この記事は1年以上経過しています。内容的に古い場合があります。

jquery.mb.YTPlayer

このjQueryプラグインを使えば結構簡単に出来る。ダウンロードは以下のサイトから。

jquery.mb.YTPlayer.min.jsを設置

ダウンロードしたZIPファイルを解凍し「dist」内のjquery.mb.YTPlayer.min.jsをコピーし、該当ディレクトリ内に設置。以下の例は「js」ディレクトリ内に設置した例。head内などお好きなところに設置。
当然jQueryを先に読み込ませることを忘れずに。

/* HTML JS読み込み */
<script src="js/jquery-3.5.0.min.js"></script>
<script src="js/jquery.mb.YTPlayer.min.js"></script>

body内の該当部分にコードを設置。以下の例のように親ボックス(#movie-wrap)を作り、動画の設置部分(#youtube)を内包することにした。
videoURLのyoutubeIDは目的の動画のIDに置き換えること。
また今回は背景なので各ボックスの幅、高さのCSS指定を必ずしておく。CSSの細かい調整はお好みで。

/* HTML */
<div id="movie-wrap">
  <div id="youtube" data-property="{
    videoURL: 'https://youtu.be/youtubeID',
    containment: '#movie-wrap',
    mute: true,
    showControls:false,
    loop: true,
    autoPlay: true,
    showYTLogo: false
  }"></div>
</div>

今回使用したオプション(data-property内)は

  • videoURL・・・表示するYouTubeのURL
  • containment・・・背景にYouTubeを表示する要素
  • mute・・・音声オフ(false=off/true=on)
  • showControls・・・YouTubeコントローラ表示(false=off/true=on)
  • loop・・・ループさせるか(false=off/true=on/数値で回数)
  • autoPlay・・・自動再生(false=off/true=on)
  • showYTLogo・・・YouTubeロゴの表示(false=off/true=on)

body閉じタグの前あたりで以下のように締めくくる。

/* HTML内script設定 */
<script>
(function($) {
  $("#youtube").YTPlayer();
})(jQuery);
</script>

data-propertyに使えるオプションを詳しくみたい場合は以下で。

スマホ時を考えておく

動画は重いためファーストビューが遅くなる可能性が高い。なのでGoogle様から嫌われてしまうかも。
と言うか狭いスペースで見せるほど必要なものか?など自問自答もあるかと思う。
そんな時は「いっそ画像に置き換える」こともひとつの方法。
今回は背景なので画像用のボックスの幅、高さのCSS指定を必ずしておく。

/* HTML */
<div id="img-wrap"></div> <!-- 画像用のdivを追加 -->
<div id="movie-wrap">
  <div id="youtube" data-property="{
    videoURL: 'https://youtu.be/youtubeID',
    containment: '#movie-wrap',
    mute: true,
    showControls:false,
    loop: true,
    autoPlay: true,
    showYTLogo: false
  }"></div>
</div>

jQueryでスマホ時(ブレークポイント)で動画と画像の切り替えを行う。

/* HTML内script設定 */
<script>
(function($) {
  $(window).on("load resize",function(){
    if( window.matchMedia("(min-width: 769px)").matches ){
      $("#youtube").YTPlayer();
      $("#img-wrap").removeAttr("style");
    } else {
      $("#img-wrap").css({
        "background-image": "url( 画像のURL )",
        "background-position": "center center",
        "background-size": "cover"
      });
    }
  });
})(jQuery);
</script>

#img-wrapに背景画像のCSSを最初から設定しておき、非表示にしておいてブレークポイントで振り分けるのもありかも。と言うか、そっちの方が簡単と後で気づく。
またこの方法だと「画像まんまだとつまらない」とワガママを言うクライアントには、スマホ時にスライドショー系のプラグイン(vegas.jsとか)を使うことも出来る。(軽量化した意味がないが)