|            
标题 利用JScript/CSS 编程技术模拟实现TABView控件zosatapo(原作) 
  关键字 JScript CSS TABView 控件 网页设计 
 
 
  利用JScript/CSS 编程技术模拟实现TABView控件 [key word] JScript CSS TABView 控件 网页设计 [abstract]本文介绍JSCript/CSS编程来模拟实现TABView控件。
  [Author] zosatapo(CSDN会员) [Email]dertyang@263.net
  [正文]  熟悉可视化界面编程的朋友一定很熟悉各种控件。在所有的控件中有一个控件在数据库应用编程中 经常用到,这个控件就是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%> </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>
   
   
   
 |