2

我有以下代码,但我对 jQuery 还是很陌生,我很确定这是可以缩短或使用更少变量来创建更好的动态插件的混乱代码。我正在尝试尝试不同类型的逻辑。这是代码。

$.pluginName = (function () {
    $(function () {
        var message = "Hello World!";
        var animSpeed = 300;
        var animType = 'fadeIn';
        var icon = "pin";
        var btnText = "Purchase";
        var btnColor = "pink";
        var btnLink = 'http://www.google.com';
        var content = '<div id="mn_close" class="light"></div>' + '<div id="mn_border"></div>' + '<i class="icon-' + icon + '"></i>' + '<span class="mn_message">' + message + '</span>' + '<a href="' + btnLink + '" class="button ' + btnColor + '">' + btnText + '</a>';
        $("#mn_close").live("click", function () {
            $('.mn_bar').animate({
                top: '-50'
            }, animSpeed, function () {});
        });
        $(".mn_bar").append(content);
        $(function () {
            $(".mn_bar").addClass("animated");
            $(".mn_bar").addClass(animType);
        })
    })
})(jQuery);

关于如何将这些变量传递给用户可以从 HTML 源动态更改的选项的任何提示?我不期待详细的答案,但我会很感激传递的任何帮助。

EDI:JS Fiddle 与 CSS 和 HTML。

http://jsfiddle.net/QjFnf/8/

提前致谢!

4

2 回答 2

1

看看这是否有帮助:

(function( $ ){

  var _defaults = {
    message = 'Hello World!',
    animSpeed = 300,
    animType = 'fadeIn',
    icon = 'pin',
    btnText = 'Purchase',
    btnColor = 'pink',
    btnLink = 'http://www.google.com'
  };

  $.pluginName = function( opts ) {

    var o = $.extend( {}, _defaults, opts )
      , $bar = $('.mn_bar').addClass('animated '+ animType)
      , $close = $('<div id="mn_close" class="light"/>')
      , $icon = $('<i class="icon-"'+ o.icon +'></i>')
      , $message = $('<span class="mn_message">'+ o.message +'</span>')
      , $link = $('<a href="'+ o.btnLink +'" class="button "'+ o.btnColor +'>'+ o.btnText +'</a>');

    $close.click(function(){
      $bar.animate({ top: '-50px' }, animSpeed );
    });

    $bar.append( $bar, $close, $icon, $message, $link );

  };

})( jQuery );
于 2012-12-27T03:00:06.873 回答
0

根据@kennypu 的评论,我已经这样做了:我根本没有测试过,但我认为这是重构插件的好方法:

(function( $ ) {
    $.fn.myPlugin = function( options ) {

        // Create some defaults, extending them with any options that were provided
        var settings = $.extend( {
            message : "Hello World!",
            animSpeed : 300,
            animType : 'fadeIn',
            icon : "pin",
            btnText : "Purchase",
            btnColor : "pink",
            btnLink : 'www.google.com',
        }, options);

        // A tidier way to create the content would be to use jQuery like this : http://api.jquery.com/jQuery/#jQuery2
        var content : '<div id="mn_close" class="light"></div>' + '<div id="mn_border"></div>' + '<i class="icon-' + settings.icon + '"></i>' + '<span class="mn_message">' + settings.message + '</span>' + '<a href="' + settings.btnLink + '" class="button ' + settings.btnColor + '">' + settings.btnText + '</a>';

        var mn_bar = $(".mn_bar");
        mn_bar.append(content);

         $("#mn_close").on("click", function () {
            mn_bar.animate({
                top: '-50'
            }, settings.animSpeed, function () {});
        });


        mn_bar.addClass("animated " + settings.animType);

    })
})(jQuery);

编辑:我设置了一个变量,.mn_bar因为没有理由再次在 DOM 中查找该元素。我还删除了这两个电话,addClass()只打了一个。

于 2012-12-27T02:53:34.817 回答