我制作了一个小滚动条jQuery插件。它有一个非常标准的实现:$(selector).drollScroll({options});
,带有默认值。诀窍是我希望用户能够提前设置这些默认值,这样对于较大的站点(我正在为更大的站点开发这个),未来的用户可以轻松获得相同的滚动条而不必每次都指定参数
我真的喜欢允许用户在没有首先实例化jQuery对象的情况下执行此操作,所以通过类似$.drollScrollDefaults({options})
的内容。
到目前为止,我有这个:
(仅限于阅读乐趣的必需品)
(function($)
{
var defaults = {
content : ".drollScrollBowl",
scrollBoxClassName : "drollScrollShoal",
scrollbarClassName : "drollScrollPole",
thumbClassName : "drollScrollTrollThumb",
scrollbarOpacity : 1,
scrollbarFadeTime : 300,
scrollbarTimeToLive : 1000,
alwaysVisible : true,
autoFade : false,
overrideBoxStyling : false,
overrideBarStyling : false,
overrideThumbStyling : false,
scrollWidthConstant : false
};
$.drollScrollDefaults = function(options)
{
$.extend(defaults, options);
};
$.fn.drollScroll = function(options)
{
var opts;
return this.each(function()
{
// we want opts to be its own object in case someone edits it later
opts = $.extend({}, defaults, options);
$(this).data("drollScroll", {options : opts});
});
};
})(jQuery);
现在这确实有效,但此行
$.drollScrollDefaults = function(options)
严重的不可能是它应该如何完成。它感觉被黑了;我觉得我一定是做错了,就像我应该使用(对我来说完全是神秘的)原型$或者其他东西。 这是吗?我是对的吗?什么 是实现这一目标的最佳途径?我是否应该这样做??
答案 0 :(得分:4)
我没有看到它有什么问题,它并不比分配全局函数更糟糕,比如我使用window.number_format
(我构建自己的工具包)。由于您希望用户能够拨打$.drollScrollDefaults
,这就是您应该分配的内容。
答案 1 :(得分:1)
我通常在函数上定义它,例如
$.fn.myplugin = function() { ... your plugin here ... };
$.fn.myplugin.defaults = { ... defaults here ...};
主要是因为我的大部分插件都可以被称为$.myplugin
和$().myplugin()
使用$.fn.myplugin.defaults