2010-01-21 48 views
0

我寫了一個插件與下面的「簽名」:更輕鬆地調用自定義的jQuery插件

jQuery.fn.attach = function(element, settings, duration, options, callback) { 

這裏element是一個jQuery對象,settings是我的自定義設置爲我的插件和durationoptionscallback是我在jQuery的動畫使用的所有參數,如:

someObject.animate({ someCSS }, duration, options, callback); 

現在,我的問題是:是否有可能使該功能更容易打電話?舉例來說,現在,讓一切工作,我希望......我必須包括所有參數和設置,我不使用null參數:

$(this).attach($('#e1-blue'), null, 3000, null, function() { alert('done'); }); 

這將是很好能夠調用此爲:

$(this).attach($('#e1-blue'), 3000, function() { alert('done'); }); 

,併爲這個(OFC)...

$(this).attach($('#e1-blue'), 3000); 

有什麼建議?

回答

1

我能想到的最簡單的事情是重新排序參數,使得最常用的是先來。所以,如果你改變的功能:

jQuery.fn.attach = function(element, duration, callback, settings, options) { 

那麼你可以做的一切(除了可能是第一個參數)將默認值代入函數體可選。如:

if(!duration) 
    duration = 3000; 

然後

$(this).attach($('#e1-blue'), 3000, function() { alert('done'); }); 

$(this).attach($('#e1-blue'), 3000); 

將兩者是有效的,與null自動填充的其他值。

嚴格來說,您可以檢查函數內的參數類型,例如如果第二個參數是一個整數,那麼它是duration,如果它的功能是callback,如果它是一個對象,它是settings,但我不認爲稍後需要關注代碼的人會感謝你。它也可能使該功能難以延續到線後,例如,第二個整數參數是必需的。

2

我設置一個默認對象,並接受插件功能

$.fn.myPlugin=function(opt){ 
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{}); 
    }; 
    $.fn.myPlugin.defaults={ 
    element: null, 
    settings: null, 
    options: null, 
    callback: null, 
    duration: 250 
    }; 

只有一個參數實例化插件

$('#myElement').myPlugin({element: $('#el-blue'), duration: 2000}) 

如果你每次路過的東西,你可以做的選項反對第二個參數。

$.fn.myPlugin=function(element, opt){ 
    return this.each(function(){ 
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{}); 
    //do some stuff 
    if (o.callback) { 
    o.callback.call(this, o); 
    } 
    }); 
    }; 

$('#myElement').myPlugin($('#el-blue'), {duration: 3000, callback: function(){}}); 
相關問題