YouTube Player APIの音声をオンオフ

埋め込んだ動画をクリックして、動画の音声を切り替えるやり方。

右下のぴこぴこしてるのはミュートのアイコンです

HTMLの読み込み箇所に要素を用意する

複数ページで違う動画を埋め込むために、ページごとに変数でYouTubeの動画IDを渡しています。

<script>var movieID = 'vOBI0WA9CcY';</script><!-- 良き場所に書いてね -->
<div class="bgmovie mute">
	<div id="player"></div>
</div>

JSで各種設定

//youtube API
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
  player = new YT.Player('player', {
    videoId: movieID,
    playerVars: {
        playsinline: 1,
        autoplay: 1, // 自動再生
        loop: 1, // ループ有効
        iv_load_policy: 3, //動画アノテーションを表示しない
        disablekb:1, //キーボード操作OFF
        rel:0, //再生終了時に関連動画を表示しない
        controls: 0, // コントロールバー非表示
      },
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}
function onPlayerReady(event) {
    event.target.mute();
    event.target.playVideo();
}
var done = false;
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.ENDED) {
            event.target.playVideo();
    }
    //unmute
    $('.bgmovie').click(function () {
        if($(this).hasClass('mute')){
            $(this).removeClass('mute');
            player.unMute();  
        }else{
            $(this).addClass('mute');
            player.mute();
        }
    });
}

CSSで調整

クリックするとmuteというクラスが付いたり外れたりするので、それに合わせてミュートアイコンを出しています。

.bgmovie.mute::after {
    content: "";
    display: block;
    width: 1.5em;
    height: 1.5em;
    background: url(../images/common/icon_mute.svg) no-repeat;
    background-size: contain;
    position: absolute;
    bottom: 10px;
    right: 10px;
}

参考