Я использую setInterval для записи времени.и я очищаю интервал, используя clearInterval, но не работает - PullRequest
0 голосов
/ 22 октября 2018

Я использую API YouTube, здесь мне нужно записать время наблюдения пользователя, поэтому я использую функцию setInterval для записи времени.когда функция воспроизведения видео запускается через каждые 500 мсек, используя setInterval.и когда видео останавливается, я очищаю этот идентификатор (то есть возвращаемое sertInterval), используя clearInterval, но не работает.Функция записи все еще работает.и тем временем я снова запускаю видео, и в этот момент функция записи работает быстрее, чем заданный интервал (500).звоню 4-6 раз в 1 сек. Я делаю что-то не так.пожалуйста, предложите мне.здесь ниже мой код:

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;
    }
}

введите описание изображения здесь

...