【问题标题】:Easing parameter in jQuery function automatically identified?自动识别jQuery函数中的缓动参数?
【发布时间】:2016-06-01 17:52:31
【问题描述】:

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 文档中:

easing 一个字符串,指示使用哪个缓动函数 过渡。

函数 slideFadeToggle 有 2 个参数,但在代码中只传递了一个函数。 jQuery 是否会自动识别该参数是一个函数,从而跳过缓动参数并将该函数作为回调传递?或者,当显然缺少 easing 参数时,为什么这会起作用?

另外,为什么作者使用$.fn.slideFadeToggle =..

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

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

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

    是的,就是这样。

    您可以通过阅读 jQuery 源代码看到 animate 对将两个形式参数都传递给它并不是很特别。在当前版本中,这是间接完成的:这些参数用于construct an options object by calling jQuery.Speed,而inspects the types of its arguments 又确定哪个对应于什么(undefined 也由布尔检查隐式处理)。

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

    【讨论】:

    • 是不是表示函数中slideFadeToggle有回调为none并且函数保存在easing中,然后我用animat(..'fast',function(..),none) 并且 animate 函数会自动检测到传递了一个函数?因此,单词 easing 不是一个特殊的关键字或任何东西,我可以将所有带有 easing* 的 oocurences 重写为 **earing 例如?
    • @Adam 是的,是的。 “easing”只是函数形式参数的名称。你可以随心所欲地称呼它,什么都不会改变。唯一重要的是参数的数量和顺序(一如既往)以及嵌入在 jQuery 中的特殊逻辑。
    • 如果我只传递一个字符串作为第一个可选参数,那么方法 animate 可能会认为它的持续时间,对吧?即使我通过“摇摆”?
    【解决方案2】:

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

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

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

    由于slideFadeToggle() 只是简单地传递它的参数,您自动获得同样的能力来省略easing

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        相关资源
        最近更新 更多