【问题标题】:Youtube Iframe API - Detecting end of playlistYoutube Iframe API - 检测播放列表的结尾
【发布时间】:2015-03-06 16:34:49
【问题描述】:

Youtube iframe API 有一个用于检测视频结束的事件。如果与嵌入式播放列表一起使用,此事件会在每个视频之后触发。我希望只检测播放列表中最后一个视频的结尾。

这是我的尝试:

if (event.data == YT.PlayerState.ENDED && currentIndex == playlist.length - 1 ){ 
    alert('Playlist finished.');
}

这个问题会触发两次。播放列表倒数第二个视频结束时,播放器状态为ENDED,播放列表索引加一,触发过早。它还会在播放列表中最后一个视频的末尾触发,这是唯一的预期结果。

【问题讨论】:

    标签: javascript youtube youtube-iframe-api


    【解决方案1】:

    您应该仅在视频开始播放时设置currentIndex 值。这帮助我实现了同样的目标:

    function onPlayerStateChange(event) {
    
        if (event.data == YT.PlayerState.PLAYING) {
            currentIndex = event.target.getPlaylistIndex();
        }
    
        if (event.data == YT.PlayerState.ENDED) {
            if (currentIndex == (playlist.length-1)) {
                console.log('end playlist');
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我知道现在回答这个问题有点晚了,但我一直在寻找答案,但我想出了这种笨拙的方法。

      var isended=0; 
      function testifover(){
      if(isended==1) { // Did the state change while we delayed 5 seconds
      // Whatever you wanted to do at the end of the playlist here.
      }
      }
      function onPlayerStateChange(event) {
        switch (event.data) {
          case YT.PlayerState.UNSTARTED:
            console.log('unstarted');
            break;
          case YT.PlayerState.ENDED:
      isended=1;
         var myVar = setTimeout(function(){testifover()} , 5000);  // Delay 5 seconds to make sure we aren't loading another video
      // and then do whatever if we really are at the end of the playlist. 
            break;
          case YT.PlayerState.PLAYING:
          isended=0; // we started playing another vid in the playlist
            break;
          case YT.PlayerState.PAUSED:
            console.log('paused');
            break;
          case YT.PlayerState.BUFFERING:
         isended=0; // we started buffering another video in the playlist
            break;
          case YT.PlayerState.CUED:
            console.log('video cued');
            break;
            }
          }
      
          //     On state change fires and we wait 5 seconds and make sure that hasn't changed to buffering or playing or we kill the player.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 2017-02-12
        • 1970-01-01
        • 2019-01-11
        • 2013-11-06
        • 1970-01-01
        • 2017-08-18
        相关资源
        最近更新 更多