天天看點

dTree元件的學習

dtree是一個免費的js樹形菜單,使用簡單,界面制作的也很專業。

dtree樹形菜單

不同的項目需求,造成菜單樹的各種變化,是以在介紹dtree的同時,本文着重講述如何改造dtree,以達到為不同項目所用的目的。

dtree 分析

dtree的使用非常簡單,在下載下傳的dtree壓縮檔案中(2.05),要用的隻有三個:

1. dtree.js : dtree功能腳本

2. dtree.css : 樣式檔案

3. img檔案夾 : 存放dtree使用的圖示,參看下圖:

dtree圖示

很容易就可以編寫出類似上面的dtree菜單樹,源代碼如下:

<html>

<head>

<link rel="stylesheet" href="dtree.css" type="text/css" />

</head>

<body>

<script type="text/javascript" >

<!–

d = new dtree( ‘d’ ) ; //建立樹,名稱為’d'(注意和樹的對象變量名稱要一緻) 

d.add ( 0 ,-1 ,‘my example tree’ ) ; //在樹中增加節點。節點id是0,父節點是-1(根節點),節點文字’my example tree’ 

d.add ( 1 ,0 ,‘node 1′ ,‘default.html’ ) ; //根節點的子節點(父節點是0),’default.html’表示節點連結(滑鼠點選頁面跳轉url) 

d.add ( 2 ,0 ,‘node 2′ ,‘default.html’ ) ;

d.add ( 3 ,1 ,‘node 1.1′ ,‘default.html’ ) ;

d.add ( 4 ,0 ,‘node 3′ ,‘default.html’ ) ;

d.add ( 5 ,3 ,‘node 1.1.1′ ,‘default.html’ ) ;

d.add ( 6 ,5 ,‘node 1.1.1.1′ ,‘default.html’ ) ;

d.add ( 7 ,0 ,‘node 4′ ,‘default.html’ ) ;

d.add ( 8 ,1 ,‘node 1.2′ ,‘default.html’ ) ;

d.add ( 9 ,0 ,‘my pictures’ ,‘default.html’ ,‘pictures i\’ ve taken over the years’ ,” ,” ,‘img/imgfolder.gif’ ) ; //’pictures i\’ve taken over the years’是連結title,指定圖示 

d.add ( 10 ,9 ,‘the trip to iceland’ ,‘default.html’ ,‘pictures of gullfoss and geysir’ ) ;

d.add ( 11 ,9 ,‘mom\’ s birthday’ ,‘default.html’ ) ;

d.add ( 12 ,0 ,‘recycle bin’ ,‘default.html’ ,” ,” ,‘img/trash.gif’ ) ;

document.write ( d) ; //輸出dtree的html(顯示) 

//–> 

</script>

</body>

</html>

分析dtree.js,在dtree中隻有兩個結構:”節點”和”樹”,dtree的所有功能和構造都在于這兩個結構的屬性和行為中,node比較簡單,隻包含節點的基本屬性和一個構造方法,是以對dtree的分析和研究的重點可放在dtree結構中。

attributes(屬性) 

id : int 每個節點都有唯一id,增加節點時需要手工定義一個id。 

pid : int 父節點id,根節點的父節點是-1。 

name : string 節點名稱(顯示名字) 

url : string 節點url(滑鼠點選跳轉位址) 

title : string 滑鼠移動到節點上顯示的文字 

target : string 頁面跳轉所在的frame 

icon : string 節點關閉時顯示的圖示位址 

iconopen : string 節點打開時顯示的圖示位址 

_io : boolean 節點是否已打開,預設值false。 

_is : boolean 節點是否被選中,預設值false。 

_ls : boolean 是否是最後一個節點,預設值false。 

_hc : boolean 是否有子節點,預設值false。 

_ai : int 在樹的節點數組中的下标(位置),預設值0。 

_p : node 父節點對象,預設值null。 

operations(行為) 

node(id, pid, name, url, title, target, icon, iconopen, open) : void 構造方法,建立一個節點對象。open對應_io,表示節點是否已經打開。 

節點類圖

dtree 

obj : string 樹的名稱,在建立樹時定義。 

anodes : node[] 樹中的節點數組。 

aindent : [] 數組。 

root : node 根節點。 

selectednode : node 目前選擇的節點。 

selectedfound : boolean 是否有選中節點,預設false。 

completed : boolean 樹建構html是否已完成完成,預設false。 

config : hash數組 樹的配置 

target: 設定所有節點的target,預設null 

folderlinks: 目錄節點是否可以有連結,預設true 

useselection: 節點是否可以被選擇(高亮),預設true 

usecookies: 設定使用cookies儲存樹的狀态,預設true 

uselines: 是否顯示路徑點線,預設true 

useicons: 是否顯示圖示,預設true 

usestatustext: 是否在狀态欄輸出節點文字(替換原來的url顯示),預設false 

closesamelevel: 是否自動關閉兄弟節點(當打開本節點時),注意設定true時,openall()和closeall()不能工作,預設false 

inorder: 如果父節點總是在子節點之前加入樹,設定true有更好的效率,預設false 

icon : hash數組 圖示 

root: 根,預設'img/base.gif' 

folder: 關閉的檔案夾,預設'img/folder.gif' 

folderopen: 打開的檔案夾,預設'img/folderopen.gif' 

node: 檔案,預設'img/page.gif' 

empty: 空,預設'img/empty.gif' 

line: 豎線,預設'img/line.gif' 

join: 丁線,預設'img/join.gif' 

joinbottom: 直角線,預設'img/joinbottom.gif' 

plus: 加号丁線,預設'img/plus.gif' 

plusbottom: 加号直角線,預設'img/plusbottom.gif' 

minus: 減号丁線,預設'img/minus.gif' 

minusbottom: 減号直角線,預設'img/minusbottom.gif' 

nlplus: 無線加号,預設'img/nolines_plus.gif' 

nlminus: 無線減号,預設'img/nolines_minus.gif' 

dtree(objname) : void 構造方法,建立樹對象。objname: 樹名稱。 

add(id, pid, name, url, title, target, icon, iconopen, open) : void 在樹中增加一個節點,節點對象添置到anodes數組末尾。參數open表示節點是否已經打開。 

openall() : void 打開樹中所有節點。此方法由oall方法實作。 

closeall() : void 關閉樹中所有節點。此方法由oall()方法實作。 

tostring() : string 建構樹的html。此方法主要由addnode()方法實作。傳回:html。 

addnode(pnode) : string 建構pnode的所有子節點的html。參數pnode: 父節點對象。傳回:html。 

node(node, nodeid) : string 建構node的html。參數node: 節點對象;nodeid: 節點在節點數組anodes中的位置。傳回:html。 

indent(node, nodeid) : string 建構node前面的空格、點線、加減号的html。參數node: 節點對象;nodeid: 節點在節點數組anodes中的位置。傳回:html。 

setcs(node) : void 檢查并設定:1. node節點是否有子節點; 2. node節點是否是節點數組anodes中的最後一個。參數node: 節點對象。 

getselected() : int 從cookies中擷取已選中的節點,傳回:節點id或null(沒有選中任何節點)。 

s(id) : void 滑鼠點選節點發生的動作,高亮選擇的節點,并記錄在cookies中。參數id: 節點在節點數組anodes中的位置 

o(id) : void 滑鼠點選+-圖示發生的動作,打開或關閉指定節點,并記錄在cookies中。參數id: 節點在節點數組anodes中的位置 

oall(status) : void 打開或關閉所有節點,并将狀态記錄在cookies中。參數status:true打開 fasle關閉 

opento(nid, bselect, bfirst) : void 打開指定節點,并将狀态記錄在cookies中。參數nid:節點id或節點在節點數組anodes中的位置;bselect:true-打開同時被選中,false-打開不被選中;bfirst:true-nid是在節點數組anodes中的位置,false-nid是節點id。 

closelevel(node) : void 關閉和node同級别以及他們的下級的所有節點。參數node:節點對象。 

closeallchildren(node) : void 關閉node的所有子節點。參數node:節點對象。 

nodestatus(status, id, bottom) : void 改變節點的狀态(關閉 或 打開)。參數status: 要設定的狀态(true:打開 false:關閉);id: 節點id;bottom: true-是最後一個節點。 

clearcookie() : void 清除cookies。 

setcookie(cookiename, cookievalue, expires, path, domain, secure) : void 記錄入cookies。 

getcookie(cookiename) : string 從cookies中讀取。 

updatecookie() : void 将所有打開的節點id記錄在cookies中。 

isopen(id) : boolean 根據cookies的記錄,判斷一個節點是已經打開。參數id:節點id 

繼續閱讀