FancyBox和Youtube API事件
一旦我正在播放到我的fancybox中的YouTubevideo结束,我正试图发起一个事件。
所以我可以在video结束后自动关闭fancybox。
我有最后一个fancybox版本,我在youtube API上,坚持示例,但似乎ytplayer对象是“未定义”,我无法使其正常工作。
我在互联网上阅读了很多东西,包括这个,这似乎很好: 当youtubevideoID完成时,如何让fancybox自动关闭?
这是我正在使用的代码: JsFiddle
$(".fancybox").fancybox({ 'openEffect' : 'none', 'closeEffect' : 'none', 'overlayOpacity' : 0.7, 'helpers' : { media : {} }, 'afterLoad' : function() { function onYouTubePlayerReady(playerId) { //alert(playerId); //alert(document.getElementById("myytplayer")); ytplayer = document.getElementById("myytplayer"); ytplayer.addEventListener("onStateChange", "onytplayerStateChange"); } function onytplayerStateChange(newState) { //alert("Player's new state: " + newState); if (newState == 0){ $.fancybox.close(true); } } } }); // Launch fancyBox on first element $(".fancybox").eq(0).trigger('click');
如果有人得到这个工作,它会很棒! 我只是video关闭fancybox一旦完成!
非常感谢
请参阅以下工作代码(您应该使用fancybox的第2版。)
jsfiddle : http : //jsfiddle.net/c5h9U/2/
// Fires whenever a player has finished loading function onPlayerReady(event) { event.target.playVideo(); } // Fires when the player's state changes. function onPlayerStateChange(event) { // Go to the next video after the current one is finished playing if (event.data === 0) { $.fancybox.close(); } } // The API will call this function when the page has finished downloading the JavaScript for the player API function onYouTubePlayerAPIReady() { // Initialise the fancyBox after the DOM is loaded $(document).ready(function() { $(".fancybox") .attr('rel', 'gallery') .fancybox({ openEffect : 'none', closeEffect : 'none', nextEffect : 'none', prevEffect : 'none', padding : 0, margin : 50, beforeShow : function() { // Find the iframe ID var id = $.fancybox.inner.find('iframe').attr('id'); // Create video player object and add event listeners var player = new YT.Player(id, { events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange } }); } }); // Launch fancyBox on first element $(".fancybox").eq(0).trigger('click'); }); }
可能的原因:
- 测试“本地”(加载文件而不通过http:// localhost )
- 使用iframe API混合Embed API(您声明iframe的地方)(您声明DIV并加载一些JS)。 事件似乎只适用于后者。
- DIV上的ID与新YT.Player(…)呼叫上的ID不匹配