Jquery plugin template POPUP Plugin

以一个popup 的例子,学习怎么写jquery插件。插件 实例化时候 包括传属性,函数。类似jqueryUI 的使用感觉。

实现效果类似 android 的 toast 的效果。 显示提示消息,过几秒后消失。

是用方法与 JQuery UI 一样。

$('#aa').popup({

position:{

x:100,

y:200

},

duration:1000,

text:'大家好',

hide:function(duration) {

console.log(this);

alert('fadeout duraion' + duration);

}

});

代码讲解:

首先用jquery选择器,选择一个元素,来当作popup的容器。之后就是利用plugin的方法来穿参数。可以穿的参数有:

postion: popup显示的 position坐标

duration: popup显示的时间

text: 显示的文字

hide: popup div 隐藏后的回调函数

插件代码如下:

(function($) {

var methods = {

init:function(options) { //初始化一个 jqueryplugin实例

return this.each(function() {

var instance = this; //获取当前实例

var isInitialized = $(instance).data("isInitialized");

if(isInitialized == null) { //判断是否实例化过

$(instance).data('options', options);

//给 插件对象 附加css

render(instance);

$(instance).data("isInitialized", 'true');

}

})

},

show:function() {

var options = $(this).data('options'),

duration = options.duration,

that = this;

$(this).fadeIn(duration, function() {

that.fadeOut(duration, function() {

// 给初始化时候的 hide函数 传值

if(options.hide != undefined && options.hide != null) {

options.hide(duration);

}

});

});

}

};

//private

var popFadeOut = function(duration) {

setTimeout(function() {

}, duration);

};

//private

var render = function(instance) {

var $self = $(instance),

options = $self.data('options'),

duration = options.duration,

position = options.position,

isTop = options.isTop,

text = options.text;

var cssObject = new Object();

cssObject['height'] = '50px';

cssObject['width'] = '200px';

cssObject['position'] = 'absolute';

cssObject['left'] = position.x || 300;

cssObject['top'] = position.y || 100;

cssObject['background'] = 'black';

cssObject['color'] = 'white';

cssObject['display'] = 'none';

if(isTop) {

cssObject['zIndex'] = 999999;

}

$self.text(text);

$self.css(cssObject);

};

/**

* popUp插件构造函数。

*

* version 1.0

* Author: Yuqiao Gao 3/19/2013.

*/

$.fn.popup = function(method) {

if(methods[method]) {

return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));

} else if(typeof method === 'object' || !method) {

return methods.init.apply(this, arguments);

} else {

$.error('Method ' + method + ' does not exist on jquery.popup');

}

};

})(jQuery);