33-解决方案
12.8.2 解决方案
为插件添加一个静态方法需要按照添加方法的相同方式扩展jQuery对象。不同之处只是这些函数在调用时不使用jQuery选择器:
;(function($) {
$.fn.pulse = function(options) {
//将传入的选项与默认选项合并
var opts = $.extend({}, $.fn.pulse.defaults, options);
return this.each(function() {
// 为特定节点合并元数据元素
var o = $.metadata ? $.extend({}, opts, $.metadata.get(this)) : opts;
doPulse($(this),o);
});
};
function doPulse($obj,opts) {
for(var i = 0;i<opts.pulses;i++) {
$obj.fadeTo(opts.speed,opts.fadeLow).fadeTo(opts.speed,opts.fadeHigh);
}
// 重置为正常值
$obj.fadeTo(opts.speed,1);
}
// 定义添加的基础对象
$.pulse = {};
// 静态函数
$.pulse.impulse = function($obj) {
var opts = {
speed: 2500,
pulses: 10,
fadeLow: 0.2,
fadeHigh: 0.8
};
doPulse($obj,opts);
}
// 静态函数
$.pulse.warpspeed = function($obj) {
var opts = {
speed: 25,
pulses: 100,
fadeLow: 0.2,
fadeHigh: 0.8
};
doPulse($obj,opts);
}
//跳动插件默认选项
$.fn.pulse.defaults = {
speed: "slow",
pulses: 2,
fadeLow: 0.2,
fadeHigh: 1
};
})(jQuery);
调用插件中的静态方法非常简单,只要显式地传递一个需要操作的有效对象:
// 在第一个返回元素上调用impulse方法
jQuery.pulse.impulse(jQuery('p:first'));
// 在第一个返回元素上调用warpspeed方法
jQuery.pulse.warpspech(jQuery('p:first'));