/* --------------------------------------------------------------------- モーダル設定 --------------------------------------------------------------------- */ // YouTube IFrame 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); // YouTube プレーヤーの配列 var players = []; // YouTube IFrame API の準備ができたら呼び出される関数 function onYouTubeIframeAPIReady() { console.log('YouTube IFrame API ready'); } function onPlayerReady(event) { // プレーヤーの準備ができたときの処理(必要に応じて) console.log('Player ready:', event.target); } // 動画を読み込む関数 function loadYouTubeVideo(containerId, videoId) { const container = document.getElementById(containerId); if (!container) return; const iframe = document.createElement('iframe'); iframe.src = `https://www.youtube.com/embed/${videoId}?enablejsapi=1`; iframe.frameBorder = 0; iframe.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'; iframe.allowFullscreen = true; container.appendChild(iframe); // YouTube Player を作成 const player = new YT.Player(iframe, { events: { 'onReady': onPlayerReady } }); players.push(player); console.log(`Loaded video ${videoId}, total players: ${players.length}`); } // すべての動画を停止する関数 function stopAllVideos() { let stoppedCount = 0; // YouTube IFrame APIを使用して停止を試みる players.forEach(function (player, index) { if (player && typeof player.stopVideo === 'function') { player.stopVideo(); stoppedCount++; console.log(`Stopped video for player ${index} using YouTube API`); } }); // フォールバック: iframeを直接操作 if (stoppedCount === 0) { const iframes = document.querySelectorAll('iframe[src*="youtube.com"]'); iframes.forEach(function (iframe, index) { const src = iframe.src; iframe.src = ''; iframe.src = src; stoppedCount++; console.log(`Stopped video for iframe ${index} using src reset`); }); } console.log(`Attempted to stop ${players.length} videos, successfully stopped ${stoppedCount}`); return stoppedCount; } $(function () { $('a[href][data-lity-modifications]').on('click', function () { const href = $(this).attr('href').split('#'); if (href.length !== 2 || href[1] === '') { return false; } const $target = $(`#${href[1]}`); if ($target.length !== 1) { return false; } $target.removeClass('lity-hide').closest('.lity-modifications').removeClass('lity-hide'); setTimeout(() => { $target.closest('.lity').removeClass('lity-closed').addClass('lity-opened'); }); // 動画を遅延読み込み const $videoPlaceholder = $target.find('[data-youtube-id]'); if ($videoPlaceholder.length) { const videoId = $videoPlaceholder.data('youtube-id'); loadYouTubeVideo($videoPlaceholder.attr('id'), videoId); } return false; }); $('[data-lity-close]').on('click', function () { const $target = $(this).find('.lity-content').children(':not(.lity-hide)'); $target.closest('.lity').removeClass('lity-opened').addClass('lity-closed'); setTimeout(() => { $target.addClass('lity-hide').closest('.lity-modifications').addClass('lity-hide'); }, 300); console.log("モーダル閉じる"); const stoppedCount = stopAllVideos(); // モーダルを閉じるときに動画を停止 console.log(`モーダルを閉じたときに ${stoppedCount} 個の動画を停止しました。`); // 動画プレースホルダーをリセット $('[data-youtube-id]').empty(); players = []; // プレーヤー配列をリセット }); // モーダルの外側をクリックしたときにも動画を停止 $(document).on('click', '.lity-wrap', function (e) { if ($(e.target).is('.lity-wrap')) { const stoppedCount = stopAllVideos(); console.log(`モーダルの外側をクリックしたときに ${stoppedCount} 個の動画を停止しました。`); // 動画プレースホルダーをリセット $('[data-youtube-id]').empty(); players = []; // プレーヤー配列をリセット } }); $('.lity-content').on('click', function (e) { e.stopPropagation(); }); });