2017-04-21 81 views
0

多個按鈕可以連接到同一頁面,而該頁面又具有自己的YouTube標識。該按鈕可以點擊,這將打開模式(彈出)內的YouTube視頻。我有一個單一的實例工作,我怎樣才能讓JavaScript代碼處理多個按鈕?使用iframe嵌入API的同一頁面上的多個YouTube播放器

的HTML(PHP)看起來像如下:

<button id="play-icon-<?php echo $bID; ?>" class="button" target="_blank">Watch our show reel</button> 
 

 
<div class="remodal video-modal" data-remodal-id="video-modal-<?php echo $bID; ?>"> 
 
    <button data-remodal-action="close" class="modal-close"><span class="icon-close"></span></button> 
 
    <div class="video-wrapper"> 
 
    <div id="player-container" class="screen"></div> 
 
    </div> 
 
    <span class="loader"></span> 
 
</div>

然後,我有一個觸發模式和控制視頻的JavaScript代碼:

$(function() { 
 
    openModal('<?php echo $youtube_ID; ?>'); 
 
}); 
 

 

 
function openModal(video_id) { 
 
    var playButton = $('#play-icon-<?php echo $bID; ?>'); 
 
    var modal = $('[data-remodal-id=video-modal-<?php echo $bID; ?>]'); 
 
    var settings = { 
 
    hashTracking: false 
 
    } 
 
    var inst = modal.remodal(settings); 
 
    var device = $.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase())); 
 

 
    playButton.on('click', function(e) { 
 

 
    if (device) { 
 

 
     var yturl = '//www.youtube.com/embed/' + video_id + '?rel=0&showinfo=0&modestbranding=1&autoplay=1&controls=0'; 
 
     $('body').append('<span id="close-video-modal" class="icon-close"></span><iframe id="large-modal-banner-video" src="' + yturl + '"></iframe>'); 
 

 
    } else { 
 

 
     inst.open(); 
 
     play_video(video_id); 
 

 
    } 
 

 
    }); 
 
} 
 

 
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 modelPlayer; 
 
var modelPlayerDefaults = { 
 
    autoplay: 0, 
 
    autohide: 1, 
 
    modestbranding: 0, 
 
    rel: 0, 
 
    showinfo: 0, 
 
    controls: 0, 
 
    disablekb: 1, 
 
    enablejsapi: 0, 
 
    iv_load_policy: 3 
 
}; 
 

 
function play_video(id) { 
 
    modelPlayer = new YT.Player('player-container', { 
 
    videoId: id.toString(), 
 
    events: { 
 
     'onReady': onModalPlayerReady, 
 
     'onStateChange': onModelPlayerStateChange 
 
    }, 
 
    playerVars: modelPlayerDefaults 
 
    }); 
 
} 
 

 
function onModelPlayerStateChange(e) { 
 
    if (e.data === 1) { 
 
    $('.loader').fadeOut(); 
 
    $('#player-container').addClass('active'); 
 
    } else if (e.data === 0) { 
 
    var currentModal = $('#player-container.active').closest('.video-modal'); 
 
    var inst = currentModal.remodal(); 
 
    inst.close(); 
 
    $('#player-container').removeClass('active'); 
 
    } else { 
 
    $('#player-container').removeClass('active'); 
 
    $('.loader').show(); 
 
    } 
 
} 
 

 
function onModalPlayerReady(e) { 
 
    modelPlayer.playVideo(); 
 
} 
 

 
$(document).on('closed', '.video-modal', function() { 
 
    modelPlayer.destroy(); 
 
}); 
 

 
$(document).on('click tap', '#close-video-modal', function(e) { 
 
    e.preventDefault(); 
 

 
    $('#close-video-modal, #large-modal-banner-video').fadeOut(function() { 
 
    $(this).remove(); 
 
    }); 
 

 
});

需要將這些代碼包含到可重用函數中,任何幫助都會很棒。

回答

0

這聽起來很混亂。您將打開並控制多個彈出窗口?他們會放鬆焦點!

如果你只是想從一個按鈕/鏈接加載視頻到彈出窗口,這是可能的。

我在我做的小型「youtube操場」中有這個。
其中之一是THIS one。選擇User uploads並放入用戶播放列表中查看。

我打開一個由iframe填充的彈出窗口。
反過來,它已發送基本信息,以便它知道要加載什麼。

相關問題