前提・実現したいこと
HTML5 Javascript にてyoutubeAPIを使用しボタンを押したら周りが暗くなりyoutubeの動画画面が浮かび上がる一般的によく見るモーダルを作成したいと思い実装してみたところ、IE11のブラウザのみうまく動いてくれませんでした。
IEのブラウザへの対応に関する知識があまりないため、解決に困り質問させていただきました。
ご存知の方がいらっしゃいまいたらよろしくお願いいたします。
発生している問題・エラーメッセージ
モーダルを開くトリガーのボタンをクリックすると、IEの開発者ツールのConsoleに以下のエラーメッセージが表示され、モーダルが開かない状態です。
chrome, edge, firefoxでは正常にモーダルが開かれその中の動画再生もできています。
未定義またはNULL参照のプロパティ'target'は取得できません
該当のソースコード
html
1 2<!--モーダルを開くボタンのコード--> 3<div class="wrap-1"> 4 <p class="modal1-open">開く</p> 5</div> 6<div class="wrap-2"> 7 <p class="modal2-open">開く</p> 8</div> 9 10<!--開くモーダルの部分のコード--> 11<div class="modal__mask"></div> 12 <section class="modal__section" id="modal1"> 13 <div class="modal__inner"> 14 <div class="modal__contents"> 15 <div class="modal__youtube" id="movie-1"></div> 16 <img class="modal1-close modal__close" src="./img_modal-close.png" alt="close"> 17 </div> 18 </div> 19 </section> 20 <section class="modal__section" id="modal2"> 21 <div class="modal__inner"> 22 <div class="modal__contents"> 23 <div class="modal__youtube" id="movie-2"></div> 24 <img class="modal2-close modal__close" src="./img_modal-close.png" alt="close"> 25 </div> 26 </div> 27 </section>
js
1var tag = document.createElement('script'); 2 tag.src = "https://www.youtube.com/iframe_api"; 3 var firstScriptTag = document.getElementsByTagName('script')[0]; 4 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 5 6 //複数動画を扱いたいので動作に使用するそれぞれの要素を配列に格納 7 var ytPlayer = []; 8 var ytData = [ 9 { 10 id: 'youtube1の動画ID', 11 area: 'movie-1', 12 target: '#modal1', 13 trigger: '.modal1-open', 14 close: '.modal1-close' 15 }, 16 { 17 id: 'youtube2の動画ID', 18 area: 'movie-2', 19 target: '#modal2', 20 trigger: '.modal2-open', 21 close: '.modal2-close' 22 },] 23 24function onYouTubeIframeAPIReady() { 25 //動画の種類の配列をループさせプロパティを設定 26 for (let i = 0; i < ytData.length; i++) { 27 ytPlayer[i] = new YT.Player( 28 ytData[i]['area'], 29 { 30 width: 800, 31 height: 450, 32 videoId: ytData[i]['id'], 33 playerVars: { 34 rel: 0, 35 loop: 0, 36 videoId: ytData[i]['id'], 37 } 38 } 39 ); 40 41 //モーダルの表示と非表示 42 $(ytData[i]['trigger']).on('click', function() { 43 $(ytData[i]['target']).fadeIn(); 44 $('.modal__mask').fadeIn(); 45 }); 46 47 $(ytData[i]['close']).on('click', function() { 48 $(ytData[i]['target']).fadeOut(); 49 $('.modal__mask').fadeOut(); 50 ytPlayer[i].pauseVideo(); 51 }); 52 53 } 54 } 55 56 window.addEventListener('load', function() { 57 onYouTubeIframeAPIReady(); 58 });
試したこと
エラー文が「//モーダルの表示と非表示」以下のコードを指していたためclickイベントに原因があると思い.click(function()やon('click',ytData[i]['target'] で試してみましたが結果変わらずでした。
補足情報(FW/ツールのバージョンなど)
検証ブラウザ:IE11
jQuery3.2.1
HTML5
回答2件
あなたの回答
tips
プレビュー