How to generate a simple popup using jQuery的答案提供了以下简短的jsFiddle http://jsfiddle.net/SRw67/。在jsFiddle中你会发现:
function deselect(e) {
$('.pop').slideFadeToggle(function() {
e.removeClass('selected');
});
}
函数 slideFadeToggle 定义为:
$.fn.slideFadeToggle = function(easing, callback) {
return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback);
};
在jQuery文档中我发现:
缓动一个字符串,指示要使用的缓动函数 过渡。
函数slideFadeToggle有2个参数,但在代码中只传递一个函数。 jQuery是否自动识别该参数是一个函数,从而跳过缓动参数并将该函数作为回调传递?或者为什么这很有效,显然缺少缓动参数?
此外,为什么作者使用 $。fn.slideFadeToggle = .. ?
我在这里What does jQuery.fn mean?发现这是 $ .prototype.slideFadeToggle 的快捷方式,但它对我没有任何意义。为什么这在这里有用?
答案 0 :(得分:1)
如果查看.animate()
的文档,您会看到easing
参数是可选的。规范是:
.animate( properties [, duration ] [, easing ] [, complete ] )
它确定你提供这个参数的方式是检查第三个参数的数据类型 - 如果它是一个字符串,它是easing
,但如果它是一个函数,则意味着你遗漏了{{1} }参数(因此它将使用默认值),这是easing
参数。许多jQuery方法都是这样的;只要可选参数的类型都不同,它就可以找出你遗漏的那些。
由于complete
只是传递其参数,因此您自动获得遗漏slideFadeToggle()
的相同功能。
答案 1 :(得分:1)
jQuery是否自动识别该参数是一个函数 因此跳过缓动参数并传递函数作为 回调?
是的,这正是发生的事情。
通过阅读jQuery源代码可以看出animate
并不是非常特别地将两个正式参数传递给它。在当前版本中,这是间接完成的:这些参数用于construct an options object by calling jQuery.Speed
,而inspects the types of its arguments用于确定哪一个对应于什么(undefined
也由布尔检查隐式处理)
在许多其他jQuery方法中也可以看到相同的行为;例如无处不在的on
识别出四个参数,其中第二个和第三个是可选的。
答案 2 :(得分:0)
默认easing
为"swing"
,请参阅.animate()