2012-04-09 109 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函數。只是這個。