2012-04-16 15 views

cevap

12

(I 4 ay sonra bulma yaşıyorum gibi) hala bir cevap gerek emin değilim ama YouTube'un iframe yerleştirme API ile bu gerçekleştirilebilir nasıl. Bir setInterval gerektirmesi çok çirkindir, ancak YouTube API'sinde gerçekten herhangi bir "timeupdate" olayı yoktur (en azından iframe API'sinde değil), bu yüzden video zamanını her seferinde kontrol ederek sahte olmalısınız. sık sık. Sadece iyi çalışıyor gibi görünüyor.

Diyelim ki YT.Player() ile çalarınızı as shown here başlatmak istediğinizi varsayalım ve denir Kendi onProgress() işlevi uygulamak istediğinizde video zaman değişiklikleri: HTML'de

:

<div id="myPlayer"></div> 
JS

:

// first, load the YouTube Iframe API: 
var tag = document.createElement('script'); 
tag.src = "//www.youtube.com/iframe_api"; 
var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

// some variables (global here, but they don't have to be) 
var player; 
var videoId = 'SomeYoutubeIdHere'; 
var videotime = 0; 
var timeupdater = null; 

// load your player when the API becomes ready 
function onYoutubeIframeAPIReady() { 
    player = new YT.Player('myPlayer', { 
    width: '640', 
    height: '390', 
    videoId: videoId, 
    events: { 
     'onReady': onPlayerReady 
    } 
    }); 
} 

// when the player is ready, start checking the current time every 100 ms. 
function onPlayerReady() { 
    function updateTime() { 
    var oldTime = videotime; 
    if(player && player.getCurrentTime) { 
     videotime = player.getCurrentTime(); 
    } 
    if(videotime !== oldTime) { 
     onProgress(videotime); 
    } 
    } 
    timeupdater = setInterval(updateTime, 100); 
} 

// when the time changes, this will be called. 
function onProgress(currentTime) { 
    if(currentTime > 20) { 
    console.log("the video reached 20 seconds!"); 
    } 
} 

birkaç genel değişkenleri gerektiren biraz özensiz, ama kolayca planı ayrı olabilir Oynatıcıyı başlattığınızda onStateChange olayını da ekleyerek ve oynatmayı ve duraklatmayı kontrol eden bir onPlayerStateChange işlevi yazarak bir kapatma içine ve/veya aralığın durmasını sağlayın ve oynatma/duraklatmada kendini başlatın. Sadece updateTime() işlevini onPlayerReady'den ayırmanız ve doğru olay işleyicilerine stratejik olarak timeupdater = setInterval(updateTime, 100); ve clearInterval(timeupdater); numaralarını aramanız gerekir. YouTube ile etkinlik kullanma hakkında daha fazla bilgi için See here.

1

popcorn.js'a bakabilirsiniz. Bu ilginç bir mozilla projesi ve sorununuzu çözüyor görünüyor.

+0

Bu artık Mozilla tarafından korunmamaktadır – Gibolt

0

emin değil setInterval() o örneğin olay dinleyicileri kullanarak kaçınır olarak üzerinden) (herkes burada kabul eder ama setTimeout kullanmayı tercih olabilir eğer: umarım

function checkTime(){ 
    setTimeout(function(){ 
     videotime = getVideoTime(); 
     if(videotime !== requiredTime) { 
      checkTime();//Recursive call. 
     }else{ 
      //run stuff you want to at a particular time. 
      //do not call checkTime() again. 
     } 
    },100); 
} 

Onun temel yalancı kod ama fikrini taşımaktadır.

İlgili konular