Skip to main content

Callback 方法

Callback 函数在当前动画 100% 完成之后执行。

jQuery 动画的问题

许多 jQuery 函数涉及动画。这些函数也许会将 speed 或 duration 作为可选参数。

例子:

$("p").hide("slow")

speed 或 duration 参数可以设置许多不同的值,比如 "slow", "fast", "normal" 或毫秒。

使用 callback 实例

以下实例在隐藏效果完全实现后回调函数:

$("button").click(function(){
$("p").hide("slow",function(){
alert("段落现在被隐藏了");
});
});

以下实例没有回调函数,警告框会在隐藏效果完成前弹出:

没有 callback(回调)

以下实例在隐藏效果完全实现后回调函数:

$("button").click(function(){
$("p").hide(1000);
alert("段落现在被隐藏了");
});

笔记

笔记1

被立即停止的动画不会触发回调,被立即完成的动画会触发回调。

实例

$(document).ready(function(){

$("button").click(function(){
$("p").hide(3000,function(){
alert("段落现在被隐藏了");
});
});
$("#happy").click(function(){
$("p").stop(false,true);
});
});

笔记2

如果动画有队列的话,想实现其快速完成所有动画并停止,就要相应的与队列数对应条数的停止语句(鄙人陋见,仅供参考)。

$(document).ready(function(){
$("#start").click(function(){
$("div").animate({left:'300px'},5000);
$("div").animate({fontSize:'3em'},5000);
});

$("#stop1").click(function(){
$("div").stop();
});

$("#stop2").click(function(){
$("div").stop(true);
});

$("#stop3").click(function(){
$("div").stop(false,true);
$("div").stop(false,true);
});
});

笔记3

jQuery Callback 只接受 Function,否则不会执行回调。

如以下三种方式都传入一个 Function,在动画结束后执行:

$("p").hide("slow",function(){
alert("Now it's invisible");
});
var func=function(){
alert("Now it's invisible");
}
$("p").hide("slow",func);
function func(){
alert("Now it's invisible");
}
$("p").hide("slow",func);

但要注意,使用函数名可获取一个 Function 函数对象,但是 func() 这样的形式会执行函数并返回值。比如使用以下方式:

$("p").hide("slow",func());

可以看到,解释器为了确定第二个参数值,会在调用 hide 函数时就执行 func 函数,因此其看来是在动画开始前执行。

因此需要记住:JavaScript 中不带括号的函数名是传入一个可供调用的函数,带括号会执行该函数并返回其返回值。