Javascript暂停循环直到事件

时间:2015-06-07 22:09:38

标签: javascript loops for-loop video event-listener

我有javascript问题,这是我的代码的一部分:

for(var a = 0; a < videos.length; a++) {
    source.setAttribute('src', videos[a]);
    video.load();
    video.play();

    for(var b = 0; b < times[a].length; b++) {
            video.addEventListener("timeupdate", function() {
            if (this.currentTime >= times[a][b]) {
                    this.pause();
                    var answer = prompt("Please answer the question", "Answer");
                }
            }, false);
    }
}

在数组videos中,我有链接到视频和数组times我有时间为每个视频暂停视频。

我的目标是启动一个视频,然后在特定时间暂停视频,并在问题得到解答后恢复,然后当视频结束时再启动另一个视频并再次提问。我的for循环立即完成所有操作并且它不能按我的意愿工作。我想出了两个解决方案:

  1. 暂停循环直到达到事件。
  2. 使用事件监听器执行此操作。
  3. 我不知道怎么做,所以我在寻求你的帮助。

1 个答案:

答案 0 :(得分:1)

您应该删除for循环并仅处理事件。这样的事情应该清除至少一些问题:

    var a = 0;
    video.src = videos[a];
    video.load();
    video.play();
    check_time();

    //instead of looping through your video, you wait until one is finished 
    //to play the next one.
    video.addEventListener("ended", function(){
        a++;
        if(a<videos.length){
            video.src = videos[a];
            check_time();

    } 
   //this will add event listener each time video is changed.     
   function check_time(){
        var b = 0;
        video.removeEventListener("timeupdate")
        video.addEventListener("timeupdate", function() {
             if (this.currentTime >= times[a][b]) {
                 this.pause();
                 var answer = prompt("Please answer the question", "Answer");
                 b++;
                }
            }, false);
      }