WEB开发网
开发学院网页设计JavaScript 利用JScript/CSS 编程技术模拟实现TABView控件 阅读

利用JScript/CSS 编程技术模拟实现TABView控件

 2007-11-27 17:21:21 来源:WEB开发网   
核心提示:利用JScript/CSS 编程技术模拟实现TABView控件[key word] JScript CSS TABView 控件 网页设计[abstract]本文介绍JSCript/CSS编程来模拟实现TABView控件,[Author] zosatapo(CSDN会员)[Email] dertyang@263.ne

利用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></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>


 

Tags:利用 JScript CSS

编辑录入:coldstar [复制链接] [打 印]
赞助商链接