实现这一点的方法确实与getCurrentTime
yt api 上的方法有关,具体来说,在setInterval
.
您将需要保留一系列您希望呈现的叠加层,以及开始和结束时间,例如:
var overlays = [
{text:"Some text",from:1,to:6},
{text:"Some other text",from:8,to:14}];
然后,您需要几个函数来处理电影播放和停止(或暂停)。
var watchId;
function startWatch(){
watchId = setInterval( function(){
showOrHideOverlay(ytplayer.getCurrentTime());
},1000)
}
function stopWatch(){
clearTimeout(watchId);
}
您会注意到它使用了一个变量ytplayer
,并且根据jsapi 文档,可以使用以下代码来获取它:
var ytplayer ;
function onYouTubePlayerReady(playerId) {
ytplayer = document.getElementById("myytplayer");
ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}
请注意,我附加了一个事件侦听器,这使我们找到了一种处理电影状态变化的方法
function onytplayerStateChange(newState) {
if(newState == 1){ // playing
startWatch()
}
else if(newState == 0 || newState == 2){ //ended or paused
stopWatch();
}
}
所以最后一块拼图实际上是处理我设置为每秒发生的“滴答声”。这个方法showOrHideOverlay
看起来像:
function showOrHideOverlay(time){
// find overlays which should be visible at "time"
var shownOverlays = false;
for(var i=0;i<overlays.length;i++){
if(overlays[i].from < time && overlays[i].to > time){
$('#overlay').text(overlays[i].text);
shownOverlays = true;
}
}
if(!shownOverlays)
$('#overlay').text("");
}
最后,现场示例: http: //jsfiddle.net/zTZjU/(只需按剪辑上的播放)