【发布时间】:2015-09-24 02:18:41
【问题描述】:
我正在尝试制作一个又一个动画。
我的做法是这样的:
$(class).animate(
{something},
{
duration: 1000,
complete: function(){
$(class).animate(
{something},
{
duration: 1000,
complete: function(){
// More to animate when previous animation is done
}
});
}
});
到目前为止,这工作得很好。我的问题如下:
为了触发这个动画链,我使用了一个元素的点击。当您单击该元素时,会出现一个变量“ongoing”,该变量为真,因此无法重新单击该元素,因为尚未到达动画的结尾。
这个动画链中最深的动画如下。
complete: function(){
$(few divs).each(function(){
$(this).delay(delay).animate(
{"opacity": 1},
{
duration:2000,
complete: function(){
console.log(i + " finished"); //
if(i == 2){ // 3 divs
ongoing = false; // All the animations are finished, allowed to reclick
}
}
delay += 2000;
});
}
问题在于它显示了 3 次 0,1,2。
0 finished
1 finished
2 finished
0 finished
1 finished
2 finished
0 finished
1 finished
2 finished
然后我尝试了这个:
complete: function(){
selected = text;
$(few divs).each(function(i){
$(this).delay(delay).animate({"opacity": 1}, 2000);
delay += 2000;
}).promise().done(function(){ // All each's are finished
ongoing = false;
console.log("finished");
});
}
在这个例子中,还有一个无限循环,“完成”...
我的代码到底发生了什么,为什么它不起作用?
【问题讨论】:
-
您是否尝试过递归调用而不是硬编码每个级别?此外,为什么不将函数作为回调而不是在完成事件中,如jQuery animate page 页面下方所示
-
不,我没试过,但我会的。你知道回调函数和函数animate的完整参数有什么区别吗?
-
据我所知,实际上似乎没有任何区别。不过,我从未见过有人将函数放在 Complete 事件中,而不仅仅是将其作为常规回调。
标签: jquery jquery-animate promise each