Script

本类阅读TOP10

·一个简单的javascript菜单
·网站流量统计代码
·可编辑的 HTML JavaScript 表格控件 DataGrid II
·JavaScript通用库(一)
·在网页中控制wmplayer播放器
·层遇到select框时
·TYPEING TEST ON LINE 在线打字测试 Free Software Javascript (aiiiq)
·javascript表单之间的数据传递!
·让网页自动穿上外套
·搜索gb2312汉字在网上的频率

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
利用JScript/CSS 编程技术模拟实现TABView控件

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

 


 




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有