2012-04-09 101 views
2

我使用此功能容易,因为我将使用fadeTo很多:Jquery |相同功能内的功能。这是不好的做法?

function fade_to(div, speed, opacity, after_fade) { 
    $(div).fadeTo(speed, opacity, after_fade); 
} 

然后我呼吁after_fade参数相同的功能:

fade_to('#div', 3000, 1, function() { fade_to('#another_div', 3000, 1)}); 

是一件坏事去做?我会有速度/平滑问题吗? 只使用jQuery的默认fadeTo函数会更好吗?

谢谢!

+2

它给你带来了什么? – zetlen 2012-04-09 16:19:44

+0

似乎有点没有意义 – nodrog 2012-04-09 16:21:39

+2

它没有什么不对,表现会一样,但我没有看到好处。如果你跳过一些总是相同的参数,或者可能使用$('#'+ div),只是传递元素的ID – ericosg 2012-04-09 16:23:24

回答

4

用你的方法没有任何好处。另外你正在使用jQuery fadeTo函数。你做了什么没有错,只是没有收获。你可以保存工作,这种技术例如,如果你在你的自定义函数具有较少的参数:

function fade_to(div, after_fade) { 
    $(div).fadeTo(3000, 1, after_fade); 
} 

fade_to('#div', function(){ fade_to('#another_div', $.noop); }); 

这实际上节省您阻止您不必输入速度和不透明度参数工作。你也可以讨好像这样

function Fade_to(speed, opacity){ 
    return function(div, callback){ 
      $(div).fadeTo(speed, opacity, callback); 
    } 
} 

然后你可以把参数保存功能对飞象

var fade_to_foo = Fade_to(3000, 1); 
fade_to_foo('#div', function(){ fade_to_foo('#another_div'); }); 

否则没有理由不只是写的jQuery的方式

$('#div').fadeTo(3000, 1, function(){ $('#another_div').fadeTo(3000, 1); }); 
+0

+1我喜欢这个答案,除了我会为某些或所有参数设置默认功能。它可能需要一些鸭子打字,但真的可以减少代码。例如,我将'$ .noop'放入函数中,并执行'after_fade ||之类的操作$ .noop'。 – 2012-04-09 16:34:46

+0

是的,这是真的。 – Fresheyeball 2012-04-09 16:36:23

+0

...啊,我看到你更新了一个咖啡的例子。这是另一个好主意。 – 2012-04-09 16:36:54

1

您的方法很方便。我怀疑它会减缓褪色效应。在我的脑海里,这种方法没有任何问题。如果您确定淡入淡出效果在淡入淡出之前应该脉冲或闪烁,则只需将您的功能修改为脉冲/眨眼,然后淡入淡出的所有呼叫即可运行新的例程。在这种情况下它是有意义的,因为它减少了代码并提高了可维护性。 Ericosg的确提出了一个有效的观点,但为什么不减少参数,如果他们将是相同的。

5

这是一个不好的做法,因为如果不将它们应用于每个实例,就不能调用你的函数。由于您可以在jQuery中链接修饰符,并且大多数人会同意这样做是一个有用的功能,所以您正在为自己或其他任何处理此代码体的人禁用该有用功能。

如果你想添加任何额外的动画或样式,这次你必须再次通过常规的jQuery选择对象。额外的工作,额外的电话,没有真正的好处。

+0

+1关于jQuery链接的重点。 – 2012-04-09 16:27:35

+0

'return'语句会处理这个问题。 – 2012-04-09 16:29:48

1

这种做法违背了将jQuery用作可链接的短语法库的目标。然而,如果这个特定的功能对于一个项目是有用的,可以是有效的。

1

麦克,

我不知道,这必然是一个“坏”的事情,因为它可能会提供更容易的可用性或东西(不知道,因为我不知道的情况下你例如),否则使用API​​中给出的标准函数将不会。

实际上,有一个函数调用本身是在CS中使用一个名为'递归'的想法,它可以用于遍历树(您可以谷歌递归和树,以更好地了解我在这里指的是什么),或执行某种数学运算(即欧几里德算法)。

我会说,如果你这样做,这是一个好主意,问“为什么”。你不会因为速度而获得任何东西,因为你需要额外的时间传递这些参数,并且与API的实现相比,你的函数并没有完成额外的任务(至少我看到了这一点)。如果你想养成这样的习惯...让我们说更多 计算税收功能......你可能会注意到放缓。

我希望不只是在这里回答你的问题,而是要给你一些进一步的见解,为什么这通常是一个坏主意。我同意dunsmoreb和Thomasdotnet。好点!

-sf

1

最好只使用jQuery的默认fadeTo函数。只是这个。