一,開篇分析javascript
Hi,你們好!大熊君又和你們見面了,還記得前兩篇文章嗎。主要講述了以「jQuery的方式如何開發插件」,以及過程化設計與面向對象思想設計相結合的方式是css
如何設計一個插件的,兩種方式各有利弊取長補短,本系列文章是以學習爲導向的,具體場景你們本身定奪使用方式。那麼今天從這篇文章開始,咱們就以實例html
的方式帶着你們由淺入深的開發屬於本身的插件庫。嘿嘿嘿,廢話少說,進入正題。直接上實際效果圖:java
你們看到了吧,這是一個進度條插件,在咱們平常開發中,有時咱們會有一個裝載數據的進度提示,若是無任何響應勢必形成用戶dom
的體驗形式以及用戶的可交互性不是很好,因此今天模擬一個嘿嘿嘿。下面就具體分析一下吧。學習
(二),實例分析測試
(1),首先肯定這個插件作什麼事。下面看一下插件的調用方式,以及配置參數說明。以下代碼:this
new ProcessBar($("#pb"),{ callback : function(){ alert("裝載數據完成!") ; } }).init() ;
我這裏只是一個簡單的實例,因此就一個參數,那就是進度加載完要作的事,在回調中作實現部分的邏輯處理,例如跳轉到相關的頁面:spa
new ProcessBar($("#pb"),{ callback : function(){ window.location = "xxx.html" ; } }).init() ;
第一個是dom節點對象,這裏以jQuery的方式獲取,第二個是插件參數選項,"callback"表明進度加載完要作的事,在回調中作實現部分的邏輯處理。prototype
三,完整代碼以供學習,本代碼已通過測試,包括目錄結構以及相關的文件。
(1),html代碼:
<div id="pb"> <span></span> <div class="pc"></div> </div>
(2),css代碼:
#pb { padding:2px; margin: 0 auto; width: 560px; height: 32px; position:relative; border:1px solid #777; text-align: center; color: #ff3300; font-family: "微軟雅黑" ; font-size: 24px; font-weight:bold; } #pb span { position:absolute; top:0; left:45%; } #pb .pc { background-color: #00008B; width:0px;height: 32px; }
(3),js代碼:
new ProcessBar($("#pb"),{ // 調用代碼在jQuery ready 中完成 callback : function(){ alert("裝載數據完成!") ; } }).init() ; function ProcessBar(elem,opts){ this.elem = elem ; this.opts = opts ; this.tid = null ; this.tnum = 10 ; this.precent = 1 ; this.currentWidth = 0 ; } ; var pbProto = ProcessBar.prototype ; pbProto.getElem = function(){ return this.elem ; } ; pbProto.getOpts = function(){ return this.opts ; } ; pbProto.init = function(){ this._fnProcessHandler(); } ; pbProto._fnProcessHandler = function(){ var that = this ; var cb = this.getOpts()["callback"] ; this._setProcessIncWidth(this.currentWidth= this.currentWidth + this._getIncrementNum()) ; this._setPrecentText(this.precent.toString()) ; if(this.precent < 100){ this.tid = window.setTimeout(function(){ that._fnProcessHandler.call(that) ; },this.tnum) ; } else{ this._resetTimeout() ; $.isFunction(cb) && cb() ; } this.precent = this.precent + 1 ; } ; pbProto._getIncrementNum = function(){ return this.getElem().width() / 100 ; } ; pbProto._setPrecentText = function(precent){ this.getElem().find("span").text("%" + precent) ; } ; pbProto._setProcessIncWidth = function(width){ this.getElem().find(".pc").css("width",width + "px") ; } ; pbProto._resetTimeout = function(){ window.clearTimeout(this.tid) ; this.tid = null ; } ;
(四),最後總結
(1),面向對象的思考方式合理分析功能需求。
(2),以類的方式來組織咱們的插件邏輯。
(3),不斷重構上面的實例,如何進行合理的重構那?不要設計過分,要遊刃有餘,推薦的方式是過程化設計與面向對象思想設計相結合。
(4),下篇文章中會擴展相關功能,好比添加「text」這個屬性,用戶本身設置相關的提示文字信息,讓體驗更加完美。
哈哈哈,本篇結束,未完待續,但願和你們多多交流夠溝通,共同進步。。。。。。呼呼呼……(*^__^*)