【问题标题】:Load YouTube video and listen to onPlayerStateChange加载 YouTube 视频并收听 onPlayerStateChange
【发布时间】:2013-08-15 17:24:34
【问题描述】:

点击链接时,我正在尝试播放 YouTube 视频,并在播放完毕后用图片替换该视频。

上半场很轻松。但是我在下半场遇到了麻烦。 最初我只是附加了一个iframe 嵌入。但是,要收听ENDED 事件,我尝试遵循 YouTube 开发文档。现在,我似乎什么都做不了。 请查阅。 这就是我目前所拥有的。

 var t1 = '<div id="tubewrapper"><div id="player"></div></div>'


$("#link").click( function()
           {
             
             $(".trailers-band").append(t1);


    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 player;
               function onYouTubeIframeAPIReady(){
                   player = new YT.Player('player',{
                       height:'100%',
                       width:'100%',
                       videoId:tubeID,
                       events:{
                           'onReady': onPlayerReady,
                           'onStateChange': onPlayerStateChange
                       }
                   });
               }
            function onPlayerReady(event){
                alert("ready");
                event.target.playVideo();
            }

             var done = false;

             function onPlayerStateChange(event){
                 if (event.data == YT.PlayerState.ENDED && !done){
                     done = true;
                     alert("done");

                 }

             }

           }
        );

【问题讨论】:

    标签: javascript iframe youtube-api dom-events


    【解决方案1】:

    这是一个示例,说明如何播放视频、检测视频何时结束,然后在其位置显示图像。

    示例:jsFiddle

    <div id="player" style="display:none;"></div>
    <a href="#" id="link">play</a>
    <script>
    // Load API asynchronously.
    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 player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
            height: '390',
            width: '640',
            videoId: '9vHFsXOdTt0',
            events: {'onStateChange': onPlayerStateChange}
        }); // create the <iframe> (and YouTube player)
    }
    
    function onPlayerStateChange(event) {    
        if(event.data === 0) {          
            hideVideo();
        }
    }
    
    function hideVideo() {
        var img_url = 'https://www.google.com/images/srpr/logo4w.png';
        $('#player').replaceWith('<img src="'+img_url+'">');
    }
    
    $("#link").click(function(){
        $('#player').show(); // show player
        player.playVideo(); // begin playback
    });
    </script>
    

    【讨论】:

    • 这很好。我也有这个。然而,让这两个部分一起工作是个问题。我似乎无法在click 上初始化播放器。我希望$("#link").click(function(){xyz}) 加载播放器......就像在这个fiddle
    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2012-07-09
    • 2014-12-20
    • 2018-09-02
    • 2011-09-03
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多