如何在for循环之后获取代码,直到for循环完成其交互操作才能运行?

如何在for循环之后获取代码,直到for循环完成其交互操作才能运行?

问题描述:

如何在for循环完成所有interations之后停止alert函数的运行?如何在for循环之后获取代码,直到for循环完成其交互操作才能运行?

$(document).ready(function() { 
    for (i = 1; i <= 8; i++) { 
     $('#ponyDiv').animate({left: '200px'}, 2000); 
    } 
    alert("here"); 
}); 
+4

你为什么要在循环中调用animate()? – kamituel 2013-03-06 07:20:33

+0

这是我正在处理的更复杂的代码的一个更简单的例子。如果我可以解决这个问题,我的代码将工作。让我们将它改为$('#pony'+ i).animate({left:'200px'},2000); – Ben 2013-03-06 07:23:23

+0

如果您使用相对测量(+ 200px),我可能会看到此用法,但不是硬编码测量。洞察你正在尝试做什么将会有所帮助。 – jackrugile 2013-03-06 07:23:25

编辑:调用动画()在一个循环的时候,你可以做到以下几点:

$(document).ready(function() { 
    var completed = 0; 
    for (i = 1; i <= 8; i++) { 
     $('#ponyDiv'+i).animate({ 
      left: '200px' 
     }, 200, function() { 
      if (completed++ == 7) alert("here"); 
     }); 
    } 
}); 

使用JQuery animate()“完整”的回调将被称为动画完成后右:

$('#ponyDiv').animate({left: '200px'}, 2000, function() { 
    alert('here'); 
    }); 
+0

这将调用8个提醒。 – sberry 2013-03-06 07:20:34

+1

是的,除了这个答案,我已经评论了PO的问题,以了解他为什么要在循环中调用animate()。 – kamituel 2013-03-06 07:21:34

+1

虽然可能不正确,但我认为它的意思是更像'$('#ponyDiv'+ i)......' – sberry 2013-03-06 07:22:22

当循环完成时(不是最终动画完成时)会发出警报。

$(document).ready(function() { 
    for (i = 1; i <= 8; i++) { 
     $('#ponyDiv' + i).animate({left: '200px'}, 2000); 
     if(i === 8){ 
      alert("here"); 
     } 
    }  
}); 

递延:

$.when($('[id^=pony]').animate({left:'200px'},2000)) 
    .then(function() { alert('done'); }); 

当然就更好地使用类比属性开始与ID,但你得到它的要点。

+0

好的解决方案@Tetaxa。 – ZKK 2013-03-06 07:36:08