所以我尝试使用jQuery创建一个非常简单的动画,但fadeOut
的回调不会发生。
以下是代码:
var move = function(target, speed) {
$(target).delay(200).animate({bottom: "-=20"},
speed,
function() {
$(this).fadeOut(200, function() {
$(this).css("bottom", "+=20");
});
$(this).fadeIn(200);
}
);
move(target, speed);
};
move(".fa-arrow-down", 500);
我尝试了几种不同的方法,例如在控制台中查看它,设置各种断点(主要位于$(this).css("bottom", "+=20");
,正好在此行之上,并在此行的正下方。)
我不确定为什么它没有发生。任何帮助表示赞赏,如果可以,请解释实际问题,以便我也可以学习。这是一个fiddle。
答案 0 :(得分:4)
您需要将调用移至move(target, speed)
以进入fadeIn的完整功能。
var move = function (target, speed) {
$(target).delay(200).animate({
bottom: "-=20"
},
speed,
function () {
$(this).fadeOut(200, function () {
$(this).css("bottom", "+=20");
});
$(this).fadeIn(200, function () {
move(target, speed);
});
});
};
move(".fa-arrow-down", 500);
但我无法承担所有功劳...... cookie monster首先看到了递归错误。就像他说的那样,这很有效,因为每次调用move()
都会增加延迟正如我刚才所说,你立即调用move()而不是等待 用于回调。这意味着它以频率调用move() 等于调用.delay()。animate()所花费的时间,但没有 等待他们完成。换句话说,将调用move() 甚至在第一个.delay()完成之前数万次 - cookie monster