Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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_Canvas_Timer_Settimeout - Fatal编程技术网

Javascript 设置超时故障与直接呼叫

Javascript 设置超时故障与直接呼叫,javascript,canvas,timer,settimeout,Javascript,Canvas,Timer,Settimeout,可能重复: 我有一个简单的问题。我正在使用HTML5画布元素,我有一个在画布上绘制一系列方框的循环。此代码工作正常: for (var i = 0; i < this.boxes.length; i++) { this.drawBox(canvas, this.boxes[i]); } for(var i=0;i

可能重复:

我有一个简单的问题。我正在使用HTML5画布元素,我有一个在画布上绘制一系列方框的循环。此代码工作正常:

for (var i = 0; i < this.boxes.length; i++) {
    this.drawBox(canvas, this.boxes[i]);
}
for(var i=0;i
现在,我想给长方体绘制循环添加一点延迟,因此我将循环更改为:

for (var i = 0; i < this.boxes.length; i++) {
     var me = this;
     var xcanvas = canvas;
     var box = this.boxes[i];
     var func = function () {
         me.drawBox(xcanvas, box);
     };
     window.setTimeout(func, i * 50);
  }
for(var i=0;i
第二个循环仅从this.box数组中绘制一个框(数组可以包含1到16个框)。所有其他代码在源代码中都是相同的。这怎么可能

**详细的变量声明用于排除引用故障**


任何帮助都将不胜感激。

我不知道您的问题的确切答案,但在类似的情况下,我所做的只是将间隔设置为50毫秒,然后在该间隔函数中使用clearInterval和setInterval再次设置为50*I。。。大致如下:

var initialDelay = 50;
var counter = 0;
var intervalID;

intervalID = setInterval(myFunction(initialDelay), initialDelay);

myFunction(delay) {
     if (counter >= this.boxes.length) {
         clearInterval(intervalID);             
         //Clear interval and do nothing
     }
     clearInterval(intervalID);
     me.drawBox(xcanvas, box); //Do the stuff you want to do in your interval
     intervalID = setInterval(myFunction(delay * 50), initialDelay);
}

setInterval本质上就像一个循环。

典型的“循环中的闭包问题”,请看看这个问题,我在评论中链接到的帖子中提供了可能的解决方案。老实说,我看不出
setTimeout
在这里有什么帮助。是的,这个问题正是Kling和其他人所说的,一个关闭问题。有关解决方案,请参见Kling的评论。