利用JScript/CSS 編程技術模擬實現TABView控件

利用JScript/CSS 編程技術模擬實現TABView控件
[key word] JScript CSS TABView 控件 網頁設計
[abstract]本文介紹JSCript/CSS編程來模擬實現TABView控件。

[Author] zosatapo(CSDN會員)
[Email]  [email protected]

[正文]
 熟悉可視化界面編程的朋友一定很熟悉各種控件。在所有的控件中有一個控件在數據庫應用編程中
經常用到,這個控件就是TabView控件,當然也可以叫屬性頁(PropertyPage)。本文將利用JScipt結合CSS
技術在網頁中模擬實現這個控件。
 現在先介紹一下界面的主要組成部分。根據對TabView控件的分析理解,我把界面分成兩個部分。一是
Tab部分(或者叫頁面控制部分),一是頁面部分(或者叫內容部分)。同時爲了本文描述簡單,TAB控制部分
的每個TAB只有兩種狀態(激活或者非激活),每個TAB控制一個單獨的頁面。同時爲了使用的靈活性原因,
頁面設計這個任務應該由用戶自己來完成設計,但是要符合一定的格式要求。
 現在正式開始解釋這個控件的實現要素和實現過程。
//////////////////////////////////////////////////////
////////                 實現要素部分           //////
//////////////////////////////////////////////////////
[要素一]控件使用的主要樣式列表
.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處於激活狀態時使用的樣式
.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處於非激活狀態時使用的樣式
.PageNT {
 background-color:#F5F0E6;
    width:100%;height:508px;
    padding-left:0px;padding-top:2px;
      } 
//上面是Tab控制的頁面使用的樣式
[要素二]動態生成TAB控制部分代碼
 這個部分功能主要由多個TAB控件控制說明數組和一個函數組成。
 
 數組採用下面的形式:
 //Tab部分TabID     Tab部分的初始運行類類型     Tab部分對應的頁面pageID 
 var Folder1=new Array("Tab1","TabActive","Page1");
 
 //這裏請注意:程序把第一把Tab部分的初始運行類類型定義爲TabActive的項目選擇爲
 //默認的選擇項,其對應頁面也作爲默認顯示頁面。
 
 ********************重要提示**************************
 
 //但是爲了簡單,實際上也符合邏輯,應該所有定義中只有一個控制初始化
 //運行類類型定義爲TabActive
 
 //下面這個函數根據數組生成TABView的控制部分。
 function CreateFolder()
 {
 ...
 };
 [具體請參閱文後源代碼]
 
[要素三]TabView控件的功能模擬
 正如上面所講的那樣,本文儘可能把代碼寫的簡單,把實現說的更容易理解一點。
 所以這個模擬控件沒有實現mouseover以及mouseout時間響應,同時我也沒有使用
 更新的HTC組件技術。我下篇文章會寫一個組件的例子。
 
 本文在TABView控件的TAB控制部分生成以後只是簡單爲其提供一個click事件處理器。
 這樣就可以模擬了真正TABView控件的換頁功能。頁面部分用戶根據下面的規則按照
 自己對頁面內容的需要自己添加。下文我會在實現過程部分對此有詳細的說明。
 

//////////////////////////////////////////////////////
////////                 實現過程部分           //////
//////////////////////////////////////////////////////
[步驟一]建立TABView控件的控制數組定義

var Folder1=new Array("Tab1","TabActive","Page1");

var Folder2=new Array("Tab2","TabInActive","Page2");

...

[步驟二]動態生成TABView控件的控制部分

調用函數CreateFolder()讀取數組定義按照格式生成TABView控件的控制部分。


[步驟三]用戶生成自己的頁面(可以靜態也可以是動態。本文示例爲靜態)

 //下面是頁面要求的格式
 <div ID="Case Detail" CLASS="PageNT" style="display:none">
 //頁面格式中有兩個是必須的。一個是ID必須是[]
 //這裏用戶可以自由的添加自己需要的內容
 </div>

[步驟四]爲TABView控件的控制部分中的每一個TAB安裝事件處理器

tab.attachEvent("onclick",new Function("tab_onclick(this)"));


到這裏利用JScript/CSS模擬實現簡單TABView控件的工作就全部結束了。

現在可以在IE瀏覽自己的控件了,感覺不錯吧。

//////////////////////////////////////////////////////
////////                 結束語                 //////
//////////////////////////////////////////////////////
 本文只是簡單模擬一下TABView控件,要真正在WEB下面實現一個TABView要考慮
很多其他的因素,不如上面提供的TAB控制部分onmouseover,onmouseout等事件
的響應問題。同時隨着XML技術的發展,我們可以更好的利用數據庫結合服務器
端軟件動態生成TABView的控制頁面。同時如果我們採用HTC組件技術的話,我們
也可以寫出可重用性更高的代碼。

//////////////////////////////////////////////////////
////////         本文使用全部源代碼              //////
//////////////////////////////////////////////////////
爲了方面我把所有的文件都放在了一個文檔中了。你根據需要可以
把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">
<!--
//輔助函數
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">
<!--
//定義數組
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控制部分的元素個數
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%>&nbsp;</td>");
    document.write("</tr><tr height=4><td colSpan='"+totalnum+"' valign=top bgColor='#6699cc'>&nbsp;</td></tr>");
    document.write("<tr><td bgColor='#F5F0E6' colSpan="+totalnum+" height=16 valign=top></td></tr></table>");

}

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>

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章