我有以下代码,但我仍然是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小提琴CSS&amp; HTML。
提前致谢!
答案 0 :(得分: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 );
答案 1 :(得分: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()
的两次调用,只发了一次。