FancyBox and Youtube API events



我正在尝试在我的粉丝盒中播放的youtube视频结束后启动一个事件。

所以我可以在视频结束后自动关闭fancybox。

我有最后一个fancybox版本,我在youtube API上,坚持使用示例,但ytplayer对象似乎是"未定义的",我无法使其正常工作。

我在网上读了很多东西,包括这篇,看起来很好:当youtube视频id完成时,如何让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');

如果有人能做到这一点,那就太棒了!我只是想在视频结束后关闭粉丝盒!

非常感谢

请参阅以下工作代码(您应该使用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)
  • 将Embed API(声明iframe)与iframe API(声明DIV并加载一些JS)混合。这些事件似乎只适用于后者
  • DIV上的ID与新YT.Player(…)调用上的ID不匹配

相关内容

  • 没有找到相关文章

最新更新