自动识别jQuery函数中的缓动参数

Easing parameter in jQuery function automatically identified?

本文关键字:参数 jQuery 函数 自动识别      更新时间:2023-09-26

如何使用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 =..

我在这里发现jQuery.fn是什么意思?这是$.prototype.slideFadeToggle的快捷方式,但对我来说没有任何意义。为什么这在这里有用?

jQuery是否自动识别参数是一个函数 从而跳过缓动参数并将函数作为 回调?

是的,这正是发生的事情。

通过阅读 jQuery 源代码,您可以看到animate对将两个正式参数传递给它并不是很讲究。在当前版本中,这是间接完成的:这些参数用于通过调用 jQuery.Speed 来构造选项对象,而 又检查其参数的类型以确定哪个参数对应于什么(undefined也由布尔检查隐式处理)。

在许多其他jQuery方法上也可以看到相同的行为;例如,无处不在的on识别四个参数,其中第二个和第三个是可选的。

如果您查看.animate()的文档,您会发现 easing 参数是可选的。规格为:

.animate( properties [, duration ] [, easing ] [, complete ] )

它确定你是否提供了这个参数的方法是检查第三个参数的数据类型——如果它是一个字符串,它是easing,但如果它是一个函数,这意味着你省略了easing参数(所以它将使用默认值),这是complete参数。许多jQuery方法都是这样工作的;只要可选参数的类型都不同,它就可以找出你遗漏了哪些参数。

由于slideFadeToggle()只是传递其参数,因此您会自动获得相同的能力 省略easing .

默认easing"swing",见.animate()