###やりたいこと
・Youtubeの動画IDを複数個取得するので、「動画を再生」のリンクは複数個になるが、
どれを押しても1つの関数で各々の動画が再生される様にしたい。
###環境情報
・サーバー側:おそらくperl
※HTML内に使われているのは、テンプレートツールキット(Perlのフレームワーク)だと思います。
html
1[% IF youtube -%] 2 <div class="youtubeMovie"> 3[% WHILE (y_data = youtube.next) -%] 4 <a class="modal-open button-link" href="#" yId="[% y_data.video_id %]">動画再生</a> 5[% END -%] 6 </div> 7[% END -%]
javascript
1$(function(){ 2 'use scrict'; 3 4 //プレイヤー変数 5 var player; 6 var yId; 7 //オブジェクト生成 8 function youtubeAPIInit() { 9 var scriptTag = document.createElement('script'); 10 scriptTag.src = "https://www.youtube.com/iframe_api"; 11 var fsTag = document.getElementsByTagName('script')[0]; 12 fsTag.parentNode.insertBefore(scriptTag, fsTag); 13 window.onYouTubeIframeAPIReady = function(){ 14 player = new YT.Player('player', { 15 height:'540', 16 width:'960', 17 videoId:'yId', 18 playerVars:{ 19 autohide:1, 20 controls:1, 21 modestbranding:1, 22 iv_load_policy:3, 23 showinfo:1, 24 rel:0, 25 autoplay:1 26 }, 27 events: { 28 'onReady' : onPlayerReady, 29 'onStateChange': onPlayerStateChange 30 } 31 }); 32 }; 33 } 34 35 function onPlayerReady(event){ 36 event.target.playVideoAt(); 37 } 38 39 // プレーヤーの状態が変更されたとき 40 function onPlayerStateChange(event) { 41 // 現在のプレーヤーの状態を取得 42 var ytStatus = event.data; 43 // 再生終了したとき 44 if (ytStatus == YT.PlayerState.ENDED) { 45 $content.add($lay).fadeOut("fast",function(){ 46 $lay.remove(); 47 }); 48 } 49 } 50 51 //モーダル 52 var modal = {}, $lay, $content; 53 modal.inner = function() { 54 if($("#modal-overlay")[0]) return false; 55 $("body").append('<div id="modal-overlay"></div>'); 56 $lay = $("#modal-overlay"); 57 $content = $("#modal-content"); 58 $lay.fadeIn("slow"); 59 youtubeAPIInit(); 60 this.resize(); 61 $content.fadeIn("fast"); 62 $lay.unbind().click(function() { 63 player.stopVideo(); 64 $content.add($lay).fadeOut("fast",function(){ 65 $lay.remove(); 66 }); 67 }); 68 }; 69 70 //リサイズ処理 71 modal.resize = function(){ 72 var $winWidth = $(window).width(); 73 var $winHeight = $(window).height(); 74 var $contentOuterWidth = $("#modal-content").outerWidth(); 75 var $contentOuterHeight = $("#modal-content").outerHeight(); 76 $("#modal-content").css({ 77 "left": (($winWidth - $contentOuterWidth) / 2) + "px", 78 "top": (($winHeight - $contentOuterHeight) / 2) + "px" 79 }); 80 } 81 82 //クリック処理 83 $(".modal-open").click(function(){ 84 //流したい動画のIDを取得 85 var yId = $(this).attr('yId'); 86 //ここで↑のIDを使いつつ、youtubeAPIの設定をする? 87 modal.inner(); 88 modal.resize(); 89 player.playVideo(); 90 }); 91 $(window).resize(modal.resize); 92});
###追記
プログラムの順番が悪い気がするのですが、js初心者のため上手く組み上げられずにいます。。
初歩的なことかもしてませんが、ご教示頂ければと思います。
回答1件
あなたの回答
tips
プレビュー