2015-01-08 3 views
2

Youtube iframe API имеет событие для обнаружения конца видео. Если используется со встроенным списком воспроизведения, это событие срабатывает после каждого видео. Я хочу только обнаружить конец последнего видео в плейлисте.Youtube Iframe API - Обнаружение конца списка воспроизведения

Это моя попытка:

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

Проблема его это вызовет дважды. В конце второго до последнего видео в плейлисте состояние игрока ЗАВЕРШЕНО, а индекс плейлиста увеличивается на единицу, тем самым запуская слишком рано. Он также запускается в конце последнего видео в списке воспроизведения, что является единственным предполагаемым результатом.

ответ

0

Я знаю, что поздно ответить на этот вопрос, но я искал ответ, и я понял этот неуклюжий способ.

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. 
0

Вы должны установить значение 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'); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^