jQuery函数中的Easing参数自动识别?

时间:2016-02-20 00:20:38

标签: javascript jquery

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 的快捷方式,但它对我没有任何意义。为什么这在这里有用?

3 个答案:

答案 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()