Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript暂停循环直到事件_Javascript_Loops_For Loop_Video_Event Listener - Fatal编程技术网

Javascript暂停循环直到事件

Javascript暂停循环直到事件,javascript,loops,for-loop,video,event-listener,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",

我有一个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);
    }
}
for(var a=0;a=乘以[a][b]){
这个。暂停();
var answer=提示(“请回答问题”、“回答”);
}
},假);
}
}
在数组
视频中
我有到视频的链接,在数组
时间中
我有不同时间暂停每个视频的视频

我的目标是启动一个视频,然后在特定时间暂停视频,并在回答问题后恢复,然后在视频结束时启动另一个视频并再次提问。我的for循环可以立即执行所有操作,但它并没有按我所希望的那样工作。我提出了两个解决方案:

  • 暂停循环,直到到达事件
  • 使用事件侦听器执行此操作

  • 我不知道怎么做,所以我请求您的帮助。

    您应该删除
    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);
          }
    
    var a=0;
    video.src=视频[a];
    video.load();
    video.play();
    检查时间();
    //你不用循环播放你的视频,而是等到一个视频完成
    //去玩下一个。
    video.addEventListener(“结束”,函数(){
    a++;
    如果(a=乘以[a][b]){
    这个。暂停();
    var answer=提示(“请回答问题”、“回答”);
    b++;
    }
    },假);
    }
    
    您是否处理用户暂停视频的情况?用于播放视频的实际时间间隔将与预期值不同。此相关问题可能会有所帮助:运行答案中的示例代码以查看它是否正常工作。虽然看不到所有代码,但为什么要多次循环并为视频元素创建事件处理程序。只需绑定一次,然后简单地检查当前时间是否在列表中,然后执行操作可能会容易得多。此外,此代码可能会在
    b
    的值周围出现问题,因为它与处理程序的范围不隔离,因此所有代码的值都相同。