jQuery賦予了咱們很強大的插件自定義的功能,能夠做爲咱們的武器庫,應用到全部的網頁中,使用的語法比較有意思,下面是對它的一些探討.css
遵循如下的原則:jquery
1 IIFE 建立一個jQuery的scopeapp
(function($){}(jQuery))
2 namespace要惟一.dom
$.widget('custom.colorize')
custom爲命名空間,colorize爲插件名函數
3 default optionsui
options:{red:255,green:0,blue:0,change:null,random:null}
三個屬性(red,green,blue),兩個方法(change,random)初始化this
4 可擴展option,使用工廠方法會自動進行檢測輸入參數和擴展.好比spa
$('#div1').colorize({ green:128, random:function(event, ui) { return ui.green > 128; } })
就會將option擴展爲:插件
option = { red:255, green:128, blue:0, change:null, random:function(event, ui) { return ui.green > 128; } }
本質使用的應該是 $.extend({},default,options) 方法code
5 添加私有方法:
(function($){ $.widget("custom.colorize",{ options:{ red:255, green:0, blue:0, change:null, random:null }, // constructor _create:function() { this.element .addClass("custom-colorize"); this.changer = $('<button>',{text:'change','class':'custom-colorize-changer'}) .appendTo(this.element) .button(); // 綁定點擊事件在該button上 this._on(this.charger, { click:"random" }); this._refresh(); }, // 更新,render _refresh: function() { this.element.css('background-color',`rgb(${this.options.red},${this.options.green},${this.options.blue})`); // 觸發回調函數change this._trigger('change'); }, //銷燬 _destroy: function() { this.changer.remove(); this.element .removeClass('custom-colorize') .enableSelection() .css('background-color', 'transparent'); }, // 設置,包含全部參數合併 _setOptions:function(){ this._superApply(arguments); this._refresh(); }, // 設置,部分參數 _setOption:function(key,value){ if(/ref|green|blue/.test(key) && (value < 0 || value > 255)) { return; } this._super(key,value); } }); }(jQuery))
6 公有方法,添加一個隨機的方法
(function($){ $.widget("custom.colorize",{ //公有方法,可被colorize('random')訪問 random:function(){ let color = { red: Math.floor(Math.random() * 256), green: Math.floor(Math.random() * 256), blue: Math.floor(Math.random() * 256) }; if (this._trigger("random",event,colors) !== false) { this.option(colors); } } });
而後來看一下怎麼使用這個插件:
// 初始化默認參數 $('#my-widget1').colorize(); // 初始化並帶有參數 $('#my-widget2').colorize({ green: 128, random: function(event, ui) { return ui.green > 128; } }); // 點擊enable或disable $('#disable').on('click',function(){ if ($(':custom-colorize').colorize('option','disabled')) { $(':custom-colorize').colorize('enable'); } else { $(':custom-colorize').colorize('disable'); } }); // 點擊設置運行後參數 $('#grenn').on('click',function() { $(':custom-colorize').colorize('option', { red: 64, green: 250, blue: 8 }); });
值得注意的是:
1 內置的插件selector, 若是是使用的工廠方法建立的插件,能夠使用$(':插件名稱')來獲取全部應用了該插件的全部實例(instance),
2 使用"enable"和"disable"做爲參數來操做插件是否有效
3 random裏的ui是jQuery UI對象,詳情請參見 https://jqueryui.com/
代碼來自jQuery官方文檔:http://jqueryui.com/widget/
但願對你有所幫助!