分享
 
 
 

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

王朝html/css/js·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

利用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%>&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>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有