【发布时间】:2011-11-24 04:20:03
【问题描述】:
我有类似下面的代码
for(i=0, j=10; i<j ; i++){
$('#an-element-'+i).fadeIn();
}
如何使循环中的每次迭代仅在fadeIn(); 开始一次动画完成了吗?
编辑---对不起,我没有在循环中包含“i”
【问题讨论】:
-
你可以使用callback
我有类似下面的代码
for(i=0, j=10; i<j ; i++){
$('#an-element-'+i).fadeIn();
}
如何使循环中的每次迭代仅在fadeIn(); 开始一次动画完成了吗?
编辑---对不起,我没有在循环中包含“i”
【问题讨论】:
for 循环是同步的,但动画是异步的。您需要使用递归。
var i = 0, j = 10;
(function fadeNext () {
if (i < j) {
$('#an-element-' + i++).fadeIn(fadeNext);
}
}) ();
【讨论】:
根据您的代码,您的循环只会在同一个元素中淡入 10 次。
无论如何,你需要把调用放在淡入方法的回调中:http://api.jquery.com/fadeIn/
这样的东西应该可以工作(未经测试)
var counter = 10;
function fadeIn(elem) {
$(elem).fadeIn('slow', function(){
if (counter > 0) {
fadeIn(elem); //up to you how you figure out which element to fade in
}
});
counter--;
}
//var elem = $('.something');
fadeIn(elem);
【讨论】:
您可以通过将动画放在作为回调参数传递的函数中来执行动画之后的代码:
$("#foo").fadeIn("slow",function () {
alert("done");
});
但目前尚不清楚您要做什么。你是在淡化同一个元素 10 次吗?
【讨论】:
试试这个:
for (i = 0, j = 10; i < j; i++) {
$('.try').each(function() {
$(this).delay(1000).fadeOut().delay(1000).fadeIn();
});
}
您可以在延迟函数中更改持续时间。 Here is the jsFiddle.
【讨论】:
如果您对所有项目都有固定延迟,则可以使用这行代码:
$(this).fadeIn().delay(2000).fadeOut();
而不是
$(this).fadeIn();
【讨论】: