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:CSSとHTMLを使用したJSフィドル。

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でこの要素を再度検索する理由がないため、変数を設定しました。また、への2つの呼び出しを削除し、addClass()1つだけを実行しました。

于 2012-12-27T02:53:34.817 に答える