Javascript 使调用自定义jQuery插件变得更容易
我编写了一个带有以下“签名”的插件: 这里Javascript 使调用自定义jQuery插件变得更容易,javascript,jquery,plugins,jquery-plugins,Javascript,Jquery,Plugins,Jquery Plugins,我编写了一个带有以下“签名”的插件: 这里元素是jQuery对象,设置是我插件的自定义设置,持续时间,选项和回调都是我在jQuery的动画中使用的参数,如下所示: someObject.animate({ someCSS }, duration, options, callback); 现在,我的问题是:有没有可能让这个函数更容易调用?例如,现在,让一切都像我期望的那样工作。。。我必须包括所有参数,并将不使用的参数设置为null: $(this).attach($('#e1-blue'), n
元素
是jQuery对象,设置
是我插件的自定义设置,持续时间
,选项
和回调
都是我在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)
有什么建议吗?我建议您查看方法签名,看看人们如何处理可选参数。例如,查看jQuery.speed后面的设置,这是jQuery.animate使用的-
不管怎样,您只需要查看参数的类型,看看是否有人传入了它们。我建议您查看方法签名,看看人们如何处理可选参数。例如,查看jQuery.speed后面的设置,这是jQuery.animate使用的-
不管怎样,您只需要查看参数的类型,看看是否有人传入了参数。我能想到的最简单的事情是对参数重新排序,使最常用的参数排在第一位。因此,如果将函数更改为:
jQuery.fn.attach = function(element, duration, callback, settings, options) {
然后,通过将默认值放入函数体,可以使所有内容(可能第一个参数除外)都成为可选的。例如:
if(!duration)
duration = 3000;
然后
及
两者都有效,其他值自动填充为null
严格地说,您可以检查函数内部的参数类型,例如,如果第二个参数是整数,那么它是
持续时间
,如果它是函数,那么它是回调
,如果它是对象,那么它是设置
,但我认为以后必须遵循您的代码的人不会为此感谢您。如果需要第二个整数参数,也可能会使函数稍后难以向下扩展。我能想到的最简单的事情是对参数重新排序,使最常用的参数排在第一位。因此,如果将函数更改为:
jQuery.fn.attach = function(element, duration, callback, settings, options) {
然后,通过将默认值放入函数体,可以使所有内容(可能第一个参数除外)都成为可选的。例如:
if(!duration)
duration = 3000;
然后
及
两者都有效,其他值自动填充为null
严格地说,您可以检查函数内部的参数类型,例如,如果第二个参数是整数,那么它是
持续时间
,如果它是函数,那么它是回调
,如果它是对象,那么它是设置
,但我认为以后必须遵循您的代码的人不会为此感谢您。如果需要第二个整型参数,这也会使函数稍后难以向下扩展。我设置了一个默认对象,并且在插件函数中只接受一个参数
$.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})
如果每次都要传递某些内容,则可以将options对象作为第二个参数
$.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(){}});
我设置了一个默认对象,在插件函数中只接受一个参数
$.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})
如果每次都要传递某些内容,则可以将options对象作为第二个参数
$.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(){}});