YouTube JavaScript API-播放器隐藏时未启动播放

YouTube JavaScript API-播放器隐藏时未启动播放,javascript,youtube,Javascript,Youtube,我通过YT API控制YouTube iFrame播放器。它在正常情况下运行良好,但在我的过程中,有一个状态必须显示播放器:无;在我用display:block再次显示播放器之后;它工作正常,只是没有触发通常的事件 测试用例: 使用播放器上的“正常播放”按钮启动视频-播放 启动事件将被激发 按下面的按钮停止视频,它 将生成一个.stopVideo();并隐藏YouTube的父元素 iframe 单击show按钮,将其设置为 显示:块;再次 使用播放控件再次启动视频,YouTube播放器将不再有

我通过YT API控制YouTube iFrame播放器。它在正常情况下运行良好,但在我的过程中,有一个状态必须显示播放器:无;在我用display:block再次显示播放器之后;它工作正常,只是没有触发通常的事件

测试用例:

  • 使用播放器上的“正常播放”按钮启动视频-播放 启动事件将被激发
  • 按下面的按钮停止视频,它 将生成一个.stopVideo();并隐藏YouTube的父元素 iframe
  • 单击show按钮,将其设置为 显示:块;再次
  • 使用播放控件再次启动视频,YouTube播放器将不再有任何事件
  • 你知道解决这个问题的办法吗?(不隐藏视频的父元素不是选项:()


    这似乎是基于Flash的YouTube API的一个已知问题。您应该使用可见性:隐藏,而不是显示:无。
    <div>
        <div id="test" style="width: 300px; height: 200px;"></div>
    </div>
    <button id="stop">Stop</button>
    <button id="show">Show</button>
    <br />
    <textarea id="console" style="height: 500px;"></textarea>
    
    var vars = {
        enablejsapi: 1,
        origin: window.location.protocol + "//" + window.location.host,
        autoplay: 0,
        theme: 'dark',
        modestbranding: 1,
        wmode: "opaque",
        rel: 0,
        vq: 'default'
    };
    var c = $('#console');
    var tag = document.createElement("script");
    tag.src = "//www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName("script")[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    window.onYouTubeIframeAPIReady = function () {
        var player = $("#test"),
            playercontainer = player.parent();
        playerobj = new YT.Player(player.attr("id"), {
            videoId: '0_aFSNB8E5Y',
            wmode: 'opaque',
            playerVars: vars,
            events: {
                onStateChange: function (state) {
                    switch (state.data) {
                        case YT.PlayerState.PLAYING:
                            c.val("play started\n" + c.val());
                            break;
                            //case YT.PlayerState.PAUSED:
                        case YT.PlayerState.ENDED:
                            c.val("play ended\n" + c.val());
                            break;
                    }
                }
            }
        });
        $('#stop').click(function () {
            playerobj.stopVideo();
            playercontainer.css('display', 'none');
        });
        $('#show').click(function () {
            playercontainer.css('display', 'block');
            playerobj.addEventListener('onStateChange', 'test');
        });
    }