jQuery插件:在'$'上创建一个函数

时间:2013-07-11 19:36:20

标签: jquery jquery-plugins prototype

我制作了一个小滚动条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)

严重的不可能是它应该如何完成。它感觉被黑了;我觉得我一定是做错了,就像我应该使用(对我来说完全是神秘的)原型$或者其他东西。 这是吗?我是对的吗?什么 是实现这一目标的最佳途径?我是否应该这样做??

2 个答案:

答案 0 :(得分:4)

我没有看到它有什么问题,它并不比分配全局函数更糟糕,比如我使用window.number_format(我构建自己的工具包)。由于您希望用户能够拨打$.drollScrollDefaults,这就是您应该分配的内容。

答案 1 :(得分:1)

我通常在函数上定义它,例如

$.fn.myplugin = function() { ... your plugin here ... };
$.fn.myplugin.defaults = { ... defaults here ...};

主要是因为我的大部分插件都可以被称为$.myplugin$().myplugin()

使用$.fn.myplugin.defaults

在您的插件内外访问它