2012-05-16 73 views
0

我正在使用Javascript和HTML5 CAnvas进行动画制作。如何在for循环中实现延迟(非阻塞)?我想确保第二行在延迟结束之前不会被绘制。如何在for循环中放入JavaScript时间延迟?

for (i=1;i<coor.length;i++) 

     { 
      context.beginPath(); 
      var end_point=coor[i]; 
      var x1y1=start_point.split(','); 
      var x2y2= end_point.split(','); 


      context.moveTo(parseInt(x1y1[0]),parseInt(x1y1[1])); 
      context.lineTo(parseInt(x2y2[0]),parseInt(x2y2[1])); 
      context.stroke(); 

      start_point=end_point; 


     } 
+0

请详细说明,更多 – zerkms

+0

增加了实际的代码。 HTML5 canvas –

回答

1

它会更好,如果你能重新因子代码:

function animate(position) 
{ 
    // do stuff based on position 

    if(position++ < 100){ 
     setTimeout(function(){animate(position);}, 100); 
    } 
} 
+0

我这样做了。像魔术一样工作..完美。感谢您的及时帮助:) –

2

如果您使用的是jQuery,请查看.delay() API。

el.delay(800).fadeIn(400); 

for循环内,假定el是外部的一个jQuery对象for循环。

否则,我只是用setTimeout(function(){ ... }, i * 100);

+1

+1您的第二个建议。 – Peter

+0

@Peter是的,没关系,所以.delay()实际上不会做我想做的事情 - 我希望/假设会有一个可以链接的任意回调,但实际上它看起来好像没有。我将离开jQuery位,以便您的评论有意义:P – Max

1

此代码将创建2秒延迟。

var i=0;  
setInterval(function() { 
    context.beginPath(); 
       var end_point=coor[i]; 
       var x1y1=start_point.split(','); 
       var x2y2= end_point.split(','); 


       context.moveTo(parseInt(x1y1[0]),parseInt(x1y1[1])); 
       context.lineTo(parseInt(x2y2[0]),parseInt(x2y2[1])); 
       context.stroke(); 
       i++; 
       start_point=end_point; 

    }, 2000); 

通过此代码,您可以省略FOR循环。

+0

感谢队友的帮助! –

+0

你的代码在第三行中有对[i]的引用。 –

+0

现在可以mad.geek。 – jams