大熊君JavaScript插件化開發------(實戰篇之DXJ UI ------ ProcessBar)

一,開篇分析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」這個屬性,用戶本身設置相關的提示文字信息,讓體驗更加完美。

 

 

                   哈哈哈,本篇結束,未完待續,但願和你們多多交流夠溝通,共同進步。。。。。。呼呼呼……(*^__^*)       

相關文章
相關標籤/搜索