我正在使用Youtube api,在这里我需要记录用户观看时间,因此我使用setInterval函数来调整时间。使用setInterval每隔500毫秒运行一次视频播放记录功能时。当视频暂停时,我使用clearInterval清除了该ID(即由sertInterval返回),但无法正常工作。记录功能仍在运行。在此同时,我再次开始播放视频,录制功能的运行速度比给定的时间间隔(500)快。 1秒内打电话4-6次我是做错什么了吗?请建议我。下面是我的代码:
function onPlayerStateChange(event){
if(event.data === YT.PlayerState.PLAYING || event.data === YT.PlayerState.UNSTARTED){
if(!timeSpent.length){
for(var i=0, l=parseInt(player.getDuration()); i<l; i++)
timeSpent.push(false);
}
timer = setInterval(recordTime, 500);
}else if(event.data === YT.PlayerState.PAUSED){ // paused or move forward
if(parseInt(event.target.getCurrentTime()) == parseInt(lastSeenPoint)){ // paused
clearInterval(timer);
timer = 0;
}else if(event.target.getCurrentTime() > lastSeenPoint ||
event.target.getCurrentTime() < lastSeenPoint){ // move forward
seekcount = seekcount+1;
}
}else if(event.data === YT.PlayerState.BUFFERING){
clearInterval(timer);
}else if(event.data === YT.PlayerState.ENDED){ // video completed
lastSeenPoint = 0;
setVideoTrackData();
isVideoEnd = true;
clearInterval(timer);
}
}
function recordTime(){
var recordExist = false;
lastSeenPoint = player.getCurrentTime();
if(!isVideoEnd){
setVideoTrackData();
}
timeSpent[ parseInt(player.getCurrentTime()) ] = true;
calculateActualTime();
var currentInterActivity = _.filter(interactivity, function(item){return item.tick == parseInt(player.getCurrentTime()) });
console.log("interactivitytaken : "+isInteractivityTaken);
if(currentInterActivity.length && currentInterActivity[0].tick==parseInt(player.getCurrentTime()) && isInteractivityTaken == false){
player.pauseVideo();
isInteractivityTaken = true;
showInteractivityModal(currentInterActivity);
}else{
isInteractivityTaken = false;
}
}