標題 利用JScript/CSS 編程技術(shù)模擬實現(xiàn)TABView控件zosatapo(原作)
關(guān)鍵字 JScript CSS TABView 控件 網(wǎng)頁設(shè)計
利用JScript/CSS 編程技術(shù)模擬實現(xiàn)TABView控件 [key word] JScript CSS TABView 控件 網(wǎng)頁設(shè)計 [abstract]本文介紹JSCript/CSS編程來模擬實現(xiàn)TABView控件。
[Author] zosatapo(CSDN會員) [Email]dertyang@263.net
[正文] 熟悉可視化界面編程的朋友一定很熟悉各種控件。在所有的控件中有一個控件在數(shù)據(jù)庫應(yīng)用編程中 經(jīng)常用到,這個控件就是TabView控件,當然也可以叫屬性頁(PropertyPage)。本文將利用JScipt結(jié)合CSS 技術(shù)在網(wǎng)頁中模擬實現(xiàn)這個控件。 現(xiàn)在先介紹一下界面的主要組成部分。根據(jù)對TabView控件的分析理解,我把界面分成兩個部分。一是 Tab部分(或者叫頁面控制部分),一是頁面部分(或者叫內(nèi)容部分)。同時為了本文描述簡單,TAB控制部分 的每個TAB只有兩種狀態(tài)(激活或者非激活),每個TAB控制一個單獨的頁面。同時為了使用的靈活性原因, 頁面設(shè)計這個任務(wù)應(yīng)該由用戶自己來完成設(shè)計,但是要符合一定的格式要求。 現(xiàn)在正式開始解釋這個控件的實現(xiàn)要素和實現(xiàn)過程。 ////////////////////////////////////////////////////// //////// 實現(xiàn)要素部分 ////// ////////////////////////////////////////////////////// [要素一]控件使用的主要樣式列表 .TabActive { color: #ffff00; font-family:宋體;font-size:9pt; font-weight: bold; background-color: #6699CC; cursor: default; border-top: 2px outset #99ccff; border-right: 2px outset #336699; } //上面是Tab處于激活狀態(tài)時使用的樣式 .TabInactive { color: #FFFFFF; font-family:宋體;font-size:9pt; font-weight: normal; background-color: #003366; cursor: hand; border-right: 1px solid #99ccff; border-bottom: 1px solid #99ccff; } //上面是Tab處于非激活狀態(tài)時使用的樣式 .PageNT { background-color:#F5F0E6; width:100%;height:508px; padding-left:0px;padding-top:2px; } //上面是Tab控制的頁面使用的樣式 [要素二]動態(tài)生成TAB控制部分代碼 這個部分功能主要由多個TAB控件控制說明數(shù)組和一個函數(shù)組成。 數(shù)組采用下面的形式: //Tab部分TabID Tab部分的初始運行類類型 Tab部分對應(yīng)的頁面pageID var Folder1=new Array("Tab1","TabActive","Page1"); //這里請注意:程序把第一把Tab部分的初始運行類類型定義為TabActive的項目選擇為 //默認的選擇項,其對應(yīng)頁面也作為默認顯示頁面。 ********************重要提示************************** //但是為了簡單,實際上也符合邏輯,應(yīng)該所有定義中只有一個控制初始化 //運行類類型定義為TabActive //下面這個函數(shù)根據(jù)數(shù)組生成TABView的控制部分。 function CreateFolder() { ... }; [具體請參閱文后源代碼] [要素三]TabView控件的功能模擬 正如上面所講的那樣,本文盡可能把代碼寫的簡單,把實現(xiàn)說的更容易理解一點。 所以這個模擬控件沒有實現(xiàn)mouseover以及mouseout時間響應(yīng),同時我也沒有使用 更新的HTC組件技術(shù)。我下篇文章會寫一個組件的例子。 本文在TABView控件的TAB控制部分生成以后只是簡單為其提供一個click事件處理器。 這樣就可以模擬了真正TABView控件的換頁功能。頁面部分用戶根據(jù)下面的規(guī)則按照 自己對頁面內(nèi)容的需要自己添加。下文我會在實現(xiàn)過程部分對此有詳細的說明。
////////////////////////////////////////////////////// //////// 實現(xiàn)過程部分 ////// ////////////////////////////////////////////////////// [步驟一]建立TABView控件的控制數(shù)組定義
var Folder1=new Array("Tab1","TabActive","Page1");
var Folder2=new Array("Tab2","TabInActive","Page2");
...
[步驟二]動態(tài)生成TABView控件的控制部分
調(diào)用函數(shù)CreateFolder()讀取數(shù)組定義按照格式生成TABView控件的控制部分。
[步驟三]用戶生成自己的頁面(可以靜態(tài)也可以是動態(tài)。本文示例為靜態(tài))
//下面是頁面要求的格式 <div ID="Case Detail" CLASS="PageNT" style="display:none"> //頁面格式中有兩個是必須的。一個是ID必須是[] //這里用戶可以自由的添加自己需要的內(nèi)容 </div>
[步驟四]為TABView控件的控制部分中的每一個TAB安裝事件處理器
tab.attachEvent("onclick",new Function("tab_onclick(this)"));
到這里利用JScript/CSS模擬實現(xiàn)簡單TABView控件的工作就全部結(jié)束了。
現(xiàn)在可以在IE瀏覽自己的控件了,感覺不錯吧。
////////////////////////////////////////////////////// //////// 結(jié)束語 ////// ////////////////////////////////////////////////////// 本文只是簡單模擬一下TABView控件,要真正在WEB下面實現(xiàn)一個TABView要考慮 很多其他的因素,不如上面提供的TAB控制部分onmouseover,onmouseout等事件 的響應(yīng)問題。同時隨著XML技術(shù)的發(fā)展,我們可以更好的利用數(shù)據(jù)庫結(jié)合服務(wù)器 端軟件動態(tài)生成TABView的控制頁面。同時如果我們采用HTC組件技術(shù)的話,我們 也可以寫出可重用性更高的代碼。
////////////////////////////////////////////////////// //////// 本文使用全部源代碼////// ////////////////////////////////////////////////////// 為了方面我把所有的文件都放在了一個文檔中了。你根據(jù)需要可以 把javascript/jscript以及css,htm文件各自獨立出來。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> <style type="text/css">
.titlebar {font-family:宋體; font-size:9pt;color:#003300;background-color:#99CC99} BODY {font-family:宋體;font-size:9pt; background-color:#F5F0E6;}
.TabActive { color: #ffff00; font-family:宋體;font-size:9pt; font-weight: bold; background-color: #6699CC; cursor: default; border-top: 2px outset #99ccff; border-right: 2px outset #336699; } .TabInactive { color: #FFFFFF; font-family:宋體;font-size:9pt; font-weight: normal; background-color: #003366; cursor: hand;
border-right: 1px solid #99ccff; border-bottom: 1px solid #99ccff; } .TabInactiveOver { color: #FFFFFF; font-family:宋體;font-size:9pt; font-weight: normal; background-color: #003366; cursor: hand;
border-right: 1px solid #99ccff; border-bottom: 1px solid #99ccff; } .TabInactiveEmpty { color: #FFFFFF; font-family:宋體;font-size:9pt; font-weight: normal; cursor: hand;
border-right: 1px solid #99ccff; border-bottom: 1px solid #99ccff; }
.TabBarNT {background-color:#EEEEEE;
width:96%;height:21px;} .PageNT { background-color:#F5F0E6;
width:100%;height:508px; padding-left:0px;padding-top:2px; }
</style> <SCRIPT LANGUAGE="JavaScript"> <!-- //輔助函數(shù) function ltrim(str) { return str.replace(/^\s*/,""); }
function rtrim(str) { return str.replace(/\s*$/,""); }
function trim(str) { var strTmp; strTmp=ltrim(str); strTmp=rtrim(strTmp); return strTmp; }
//--> </SCRIPT>
<SCRIPT LANGUAGE="JavaScript"> <!-- //定義數(shù)組 var Folder1=new Array("Tab1","TabActive","Page1"); var Folder2=new Array("Tab2","TabInActive","Page2"); var Folder3=new Array("Tab3","TabInActive","Page3"); //--> </SCRIPT>
<SCRIPT LANGUAGE="JavaScript"> <!-- //得到tab控制部分的元素個數(shù) function getTabPartCount() { var count=1;
while(eval("window.Folder"+count)){count++;} count--; return count; } function CreateFolder() { document.write("<table bgColor='#6699cc' border=0 cellPadding=0 "+ "cellSpacing=0 id='TabBar' style='background-color:transparent;' width=100%>"); document.write("<tr height=24 vAlign='center'>");
tabNum=getTabPartCount(); i=1; while(i<tabNum+1){ Folder=eval("Folder"+i); document.write("<td class='"+Folder[1]+"' id='"+Folder[0]+ "' align='center'>"+Folder[2]+"</td>"); i++; } totalnum=tabNum+1; document.write("<td class='TabInactive'width=100%> </td>"); document.write("</tr><tr height=4><td colSpan='"+totalnum+"' valign=top bgColor='#6699cc'> </td></tr>"); document.write("<tr><td bgColor='#F5F0E6' colSpan="+totalnum+" height=16 valign=top></td></tr>");
}
function getTabPartArray() { var objReturn=new Array(); var obj=null; var count=getTabPartCount(); var i=1; while(i<=count) { obj=eval("window.Folder"+i); obj=document.all(obj[0]); if(obj!=null) { objReturn[objReturn.length]=obj; } i++; } return objReturn; }
function getCurrentActiveTab() { var ttabArray=getTabPartArray(); for(var i=0;i<ttabArray.length;i++) { if(ttabArray[i].className=="TabActive") { return ttabArray[i]; } }
} function getCurrentActivePage() { var obj=getCurrentActiveTab(); var pageID=obj.innerText; var page=getPageByID(pageID); return page; } function getPageByID(pageID) { var obj=document.all(pageID);
return obj; }
function getTabByID(tabID) { var obj=document.all(tabID); return obj; }
function tab_onclick() { var curTab=getCurrentActiveTab(); var curPage=getCurrentActivePage(); var objTab=getTDFromPoint(); var pageID=null; var objPage=null; if(objTab!=null) { pageID=objTab.innerText; //alert(pageID); objPage=getPageByID(pageID); if(curTab.id==objTab.id) { return; } else { objPage.style.display="block"; curPage.style.display="none";
objTab.className="TabActive"; //alert(objTab.className); curTab.className="TabInActive";
} } }
function getTDFromPoint() { var obj=event.srcElement; if((obj.tagName=="TD")&&((obj.className=="TabInActive")||(obj.className=="TabActive"))) { return obj; } else { return null; } }
function fattachEvent() { var objTabArray=getTabPartArray(); for(i=0;i<objTabArray.length;i++) { var tabID=objTabArray[i].id; //alert(tabID); objTabArray[i].attachEvent("onclick",new Function("tab_onclick()")); } } //--> </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> <!-- CreateFolder(); fattachEvent(); //--> </SCRIPT> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <input type="button" value="Test" onclick="tab_onclick(document.all('Tab2'))"> <div ID="Page1" CLASS="PageNT" style="display:block"> <p align="center"><font size="4">This Test Page : Page One</font></p> <TABLE align="center" border="1"> <TR> <TD>Name</TD> <TD>Age</TD> </TR> <TR> <TD>ZosaTapo</TD> <TD>23</TD> </TR> </TABLE> </div>
<div ID="Page2" CLASS="PageNT" style="display:none"> <p align="center"><font size="4">This Test Page : Page Two</font></p> <TABLE align="center" border="1"> <TR> <TD>Name</TD> <TD>Age</TD> </TR> <TR> <TD>ZosaTapo</TD> <TD>23</TD> </TR> </TABLE> </div>
<div ID="Page3" CLASS="PageNT" style="display:none"> <p align="center"><font size="4">This Test Page : Page Three</font></p> <TABLE align="center" border="1"> <TR> <TD>Name</TD> <TD>Age</TD> </TR> <TR> <TD>ZosaTapo</TD> <TD>23</TD> </TR> </TABLE> </div> </BODY> </HTML>
|