「YouTube動画をWebサイトの背景に流したい」という要望は多いですが、実装ハードルが高いと感じている方も少なくありません。
この記事では jquery.mb.YTPlayer プラグインを使い、YouTube動画をメインビジュアルの背景に設定する方法をゼロから解説します。オプションの詳細・スマホ対応・よくあるエラーまで網羅しているので、コピペでそのまま使えます。
この記事でわかること
- jquery.mb.YTPlayer の概要と導入手順
- 基本実装コード(HTML・CSS・JavaScript)
- 主要オプション一覧と使い方
- スマホ対応・パフォーマンス改善のポイント
- よくあるエラーと解決策
jquery.mb.YTPlayerとは
jquery.mb.YTPlayer は、YouTube動画をWebページの背景(フルスクリーン動画背景)として表示できるjQueryプラグインです。Massimo Di Primio氏が開発し、GitHubで公開されています。
YouTubeのAPIを内部的に利用するため、自前でmp4を用意する必要がなく、動画管理・帯域コストを大幅に削減できるのが最大の特長です。
| 特徴 | 内容 |
|---|---|
| 動画ソース | YouTubeのURL または 動画ID |
| 自動再生 | ページ読み込み時に自動再生(ミュート前提) |
| ループ | 動画終了後に自動ループ再生 |
| レスポンシブ | 親要素に合わせてリサイズ |
| 依存 | jQuery 1.9以上 + jquery.mb.YTPlayer |
導入手順
Step 1: スクリプトの読み込み
jQueryとjquery.mb.YTPlayerをCDNから読み込みます。</body>タグの直前に追加してください。
<!-- jQuery本体 --> <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> <!-- jquery.mb.YTPlayer --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mb.YTPlayer/3.3.9/jquery.mb.YTPlayer.min.js" integrity="sha512-rVFx7vXgVV8cmgG7RsZNQ68CNBZ7GL3xTYl6GAVgl3iQiSwtuDjTeE1GESgPSCwkEn/ijFJyslZ1uzbN3smwYg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
注意: jQueryは必ずjquery.mb.YTPlayerより先に読み込んでください。順序が逆になるとエラーになります。
Step 2: HTML構造を作成する
動画を表示したいコンテナ(親要素)と、プラグインが制御する動画用の要素を用意します。data-property属性にYouTube URLや各種設定をJSON形式で記述します。
<!-- メインビジュアルのコンテナ -->
<section id="mainvisual">
<!-- 動画背景(jquery.mb.YTPlayerが制御) -->
<div id="bgndVideo" class="player" data-property="{
videoURL: 'https://www.youtube.com/watch?v=YOUR_VIDEO_ID',
containment: '#mainvisual',
autoPlay: true,
mute: true,
startAt: 0,
opacity: 1,
loop: true
}"></div>
<!-- 前面に表示するコンテンツ -->
<div class="mainvisual-content">
<h1>キャッチコピーをここに</h1>
<p>サブテキストをここに</p>
</div>
</section>
YOUR_VIDEO_ID の部分を実際のYouTube動画IDに置き換えてください。動画URLが https://www.youtube.com/watch?v=abc123 であれば、IDは abc123 です。
Step 3: CSSを設定する
コンテナに position: relative と高さ指定が必要です。また、動画の前面にコンテンツを表示するために z-index を設定します。
/* メインビジュアルのコンテナ */
#mainvisual {
position: relative;
width: 100%;
height: 100vh; /* 画面の高さ全体 */
overflow: hidden;
}
/* 動画が親要素いっぱいに表示されるよう調整 */
#bgndVideo {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
/* 前面コンテンツ */
.mainvisual-content {
position: relative;
z-index: 1;
color: #fff;
text-align: center;
padding-top: 30vh;
}
/* 動画の上に半透明オーバーレイを重ねてテキストを読みやすくする */
#mainvisual::before {
content: '';
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.4);
z-index: 0;
}
Step 4: JavaScriptで初期化する
ドキュメント読み込み完了後に YTPlayer() を呼び出してプラグインを初期化します。
$(document).ready(function() {
$("#bgndVideo").YTPlayer();
});
主要オプション一覧
data-property または YTPlayer(options) の引数として渡せる主要なオプションをまとめました。
| オプション | デフォルト | 説明 |
|---|---|---|
videoURL |
"" |
YouTube動画のURL or 動画ID(必須) |
containment |
"body" |
動画を表示する親要素のセレクタ |
autoPlay |
true |
ページ読み込み時に自動再生するか |
mute |
true |
音声をミュートするか(自動再生にはtrue必須) |
loop |
true |
動画終了後にループするか |
startAt |
0 |
再生開始位置(秒) |
stopAt |
0 |
再生終了位置(秒)。0の場合は動画の最後まで再生 |
opacity |
1 |
動画の透明度(0〜1) |
vol |
50 |
音量(0〜100)。muteがtrueの場合は無効 |
showControls |
false |
YouTubeの再生コントロールを表示するか |
addRaster |
false |
動画の上にドット状のラスター模様を重ねるか |
coverImage |
"" |
動画が読み込まれる前に表示するカバー画像のURL |
quality |
"hd720" |
動画の画質(”small”/”medium”/”large”/”hd720″/”hd1080″/”highres”) |
ratio |
"16/9" |
アスペクト比。縦長コンテナでは”9/16″など変更も可 |
mobileFallbackImage |
"" |
モバイルで動画の代わりに表示する画像のURL |
完全なサンプルコード
以上をまとめた、コピペして使えるサンプルコードです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>動画背景サンプル</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
#mainvisual {
position: relative;
width: 100%;
height: 100vh;
overflow: hidden;
}
#bgndVideo {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
z-index: 0;
}
#mainvisual::before {
content: '';
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.4);
z-index: 0;
}
.mainvisual-content {
position: relative;
z-index: 1;
color: #fff;
text-align: center;
padding-top: 30vh;
}
.mainvisual-content h1 { font-size: 2.5rem; margin-bottom: 1rem; }
.mainvisual-content p { font-size: 1.1rem; }
</style>
</head>
<body>
<section id="mainvisual">
<div id="bgndVideo" class="player" data-property="{
videoURL: 'https://www.youtube.com/watch?v=YOUR_VIDEO_ID',
containment: '#mainvisual',
autoPlay: true,
mute: true,
loop: true,
startAt: 0,
opacity: 1,
mobileFallbackImage: '/images/fallback.jpg'
}"></div>
<div class="mainvisual-content">
<h1>Welcome to My Site</h1>
<p>動画が背景に流れます</p>
</div>
</section>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mb.YTPlayer/3.3.9/jquery.mb.YTPlayer.min.js"
integrity="sha512-rVFx7vXgVV8cmgG7RsZNQ68CNBZ7GL3xTYl6GAVgl3iQiSwtuDjTeE1GESgPSCwkEn/ijFJyslZ1uzbN3smwYg=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(document).ready(function() {
$("#bgndVideo").YTPlayer();
});
</script>
</body>
</html>
スマホ対応のポイント
iOSはブラウザのセキュリティポリシーにより、YouTubeの自動再生を禁止しています。そのためスマホでは動画が再生されません。
対策として、mobileFallbackImage オプションに代替画像のURLを指定することで、スマホではその画像が背景に表示されます。
$("#bgndVideo").YTPlayer({
videoURL: "https://www.youtube.com/watch?v=YOUR_VIDEO_ID",
containment: "#mainvisual",
autoPlay: true,
mute: true,
loop: true,
mobileFallbackImage: "/images/mainvisual-fallback.jpg" // スマホ用の代替画像
});
ポイント: 代替画像はPCの動画と同じ雰囲気の画像を選ぶと、スマホユーザーへの印象が統一されます。動画の一場面をキャプチャして使うのがおすすめです。
よくあるエラーと解決策
| 症状 | 原因 | 解決策 |
|---|---|---|
| 動画が表示されない(画面が黒い) | jQueryの読み込み順序が逆、または動画IDが間違い | jQuery → YTPlugin の順に読み込む。YouTubeで動画IDを再確認する |
| 動画が再生されない | autoPlayがfalse、または動画が非公開 | autoPlay: true に設定。YouTubeで動画の公開設定を確認する |
| 音が出ない | mute: trueの設定 | mute: false に変更。ただしブラウザの自動再生ポリシーにより音声付き自動再生は多くの環境でブロックされる |
| コンテナからはみ出す | CSSのoverflow設定漏れ | コンテナに overflow: hidden を追加する |
| スマホで画面が真っ白/真っ黒 | iOSの自動再生制限 | mobileFallbackImage オプションで代替画像を指定する |
| “YTPlayer is not a function” エラー | jQueryより前にYTPlayerが読み込まれている | スクリプトの読み込み順を「jQuery → YTPlayer」の順に修正する |
| 動画の縦横比がずれる | コンテナのアスペクト比と動画が合っていない | ratio オプションで動画に合わせたアスペクト比を指定する |
JavaScriptからコントロールする方法
jquery.mb.YTPlayer はJavaScriptから動画を制御するメソッドを提供しています。ボタン操作や特定のイベントに合わせて動画を操作できます。
| メソッド | 説明 |
|---|---|
YTPPlay() |
動画を再生する |
YTPPause() |
動画を一時停止する |
YTPStop() |
動画を停止する |
YTPMute() |
動画をミュートする |
YTPUnmute() |
ミュートを解除する |
YTPSetVolume(50) |
音量を設定する(0〜100) |
YTPChangeMovie(url) |
再生中の動画を別のURLに切り替える |
YTPGetCurrentTime() |
現在の再生位置(秒)を取得する |
たとえばボタンクリックで動画を一時停止・再生する実装例:
// 一時停止ボタン
$("#btn-pause").on("click", function() {
$("#bgndVideo").YTPPause();
});
// 再生ボタン
$("#btn-play").on("click", function() {
$("#bgndVideo").YTPPlay();
});
// 別の動画に切り替え
$("#btn-change").on("click", function() {
$("#bgndVideo").YTPChangeMovie("https://www.youtube.com/watch?v=NEW_VIDEO_ID");
});
パフォーマンス改善のポイント
動画背景はページの表示速度に影響します。以下の点を意識しましょう。
- startAt で要点から再生: 動画の前半に不要な部分がある場合は
startAtで中盤から再生開始すると、視覚的なインパクトが早い段階で得られます。 - quality を適切に設定: 回線が遅い環境では
"hd720"に抑えることで読み込みを速くできます。 - coverImage でローディング中の見た目を改善: 動画が読み込まれるまでの間に表示される画像を指定し、空白表示を防ぎます。
- Intersection Observer で遅延初期化: スクロールしてメインビジュアルが見えたときに初期化することで、初回ページ読み込みを軽くできます。
Intersection Observer を使った遅延初期化の実装例:
const observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
// ビューポートに入ったタイミングで初期化
$("#bgndVideo").YTPlayer();
observer.disconnect(); // 一度だけ実行
}
});
});
observer.observe(document.querySelector("#mainvisual"));
よくある質問(FAQ)
YTPChangeMovie() メソッドを使うと再生中の動画を別のYouTube動画に切り替えられます。スライドショーのような演出にも応用できます。position: relative; z-index: 1; を設定することで動画の前面に表示できます。動画は z-index: 0 になっているため重ね順が正しく制御されます。あわせて読みたい
- modal-video.jsで簡単にYouTube動画をモーダル表示する方法
- 【jQuery】アニメーション入門 Webページを動かそう!
- 【jQuery】アクセスするたびに背景色・背景画像をランダムに変更する方法
まとめ
jquery.mb.YTPlayer の導入ポイント
- jQuery → jquery.mb.YTPlayer の順でスクリプトを読み込む
data-propertyに videoURL・containment・autoPlay・mute などをJSON形式で記述する- コンテナには
position: relative; overflow: hidden;が必須 - スマホ対策として
mobileFallbackImageで代替画像を指定する - パフォーマンスは
coverImage/startAt/qualityで調整できる
jquery.mb.YTPlayerを使えば、比較的少ないコードで印象的な動画背景を実現できます。スマホ対応や表示速度も意識しながら、ユーザー体験を高めるメインビジュアルを作ってみてください。

