分享

Web页面中选项卡Tabview的实现

 WindySky 2008-09-28

Web页面中TabView的作用

TabView是许多可视化编程环境提供的常见组件,它通过选项卡将内容分类,因此能在紧凑的空间内显示众多内容,这个特点使得它在可视化编程环境中很常见.
随着Web的发展,Web页面元素也开始了组件化的历程,TabView也不例外.对此Extjs的组件最值得称道,只是似乎需要一定的时间来钻研.
本人闲暇之余也实现了自己的TabView,目前在IE下运行正常和FireFox均运行正常,这里贴出来希望和大家一起探讨.

实现效果一:


1.将TabView分为菜单和内容两个部分

Tabview,顾名思义,就是一个tab加上一个view,tab用无序列表构造的菜单来实现,view则用div来实现即可.在Web中这样设计实现Tabview比较快捷,如果象可视化编程环境那样用动态隐藏和显示每个tab对应的view则耗时比较长,有些得不偿失.
接下来的工作就简单了,将菜单部分放在一个DIV tabsHeader中,将内容部分放在一个DIV tabsBody中,再把它们放在拥有上下两个单元格的table中实现上下相接的效果,这样做在ie里和firfox中都能正常表现,如果采用div的话不好设置,容易出现上下交错或是隔离的效果.
页面代码如下:

<!-- 选项卡代码开始 -->
<table border=0 cellspacing="0" cellpadding="0" height="100%" width="100%">
  
<tr height="20"><td  width="100%">
   
<div id="tabsHeader">
      
<ul>
        
<li><href='javascript:changeTab("date")' id="date"><span>定时取日期</span></a></li>
        
<li><href='javascript:changeTab("time")' id="time" class="current"><span class="current">定时取日期时间</span></a></li>
        
<li><href='javascript:changeTab("random")' id="random"><span>定时取随机数</span></a></li>
      
</ul>
    
</div>
  
</td></tr>
  
<tr height="98%" valign="top"><td  width="100%">
    
<div id="tabsBody">
      
<p>点击每个选项卡</p>
      
<p>程序将使用Ajax从服务器端获得新数据并显示在内容中</p>
      
<p></p>
      
<p></p>
      
<p></p>
    
</div>
  
</td></tr>
</table>
<!-- 选项卡代码结束 -->

 tabsHeader的CSS定义

#tabsHeader {
  width
:460px;
  height
:100%;
  font-size
:93%;  
  line-height
:normal;
}

#tabsHeader ul 
{
  margin
:0;
  padding
:0px;
  list-style
:none;
}

#tabsHeader li 
{
   display
:inline;
   margin
:0;
   padding
:0;
}

#tabsHeader a 
{
   float
:left;
   background
:url("tableft10.gif") no-repeat left top;
   margin
:0;
   padding
:0 0 0 4px;
   text-decoration
:none;
}

#tabsHeader a.current 
{
   float
:left;
   background
:url("tableft10.gif") no-repeat left top;
   background-position
:0% -42px;
   margin
:0;
   padding
:0 0 0 4px;
   text-decoration
:none;
}

#tabsHeader a span 
{
   float
:left;
   display
:block;
   background
:url("tabright10.gif") no-repeat right top;
   padding
:5px 15px 4px 6px;
   color
:#FFF;
}

#tabsHeader a span.current 
{
   float
:left;
   display
:block;
   background
:url("tabright10.gif") no-repeat right top;
   background-position
:100% -42px;
   padding
:5px 15px 4px 6px;
   color
:#FFF;
}

/* Commented Backslash Hack hides rule from IE5-Mac \*/
#tabsHeader a span 
{
  float
:none;
}

/* End IE5-Mac hack */
#tabsHeader a:hover span 
{
   color
:#FFF;
}


.current 
{
   background-color
:#F6F6F6;
}

tabsBody的CSS定义

#tabsBody{
  width
:460px;
  height
:92%;
  padding
:10px;
  border-left
:1px solid #2763A5;
  border-right
:1px solid #2763A5;
  border-top
:1px solid #2763A5;
  border-bottom
:1px solid #2763A5;
}

 2.点击选项卡更换内容的处理

在可视化编程环境中点击选项卡是切换view,在web要这样实现不是不可以,只是有点费力不讨好,其实直接把tabsBody DIV的innerHTML更换掉就实现了view切换的效果.
更换tabsBody DIV的innerHTML需要Ajax的帮助,更换内容的示例代码如下:

更换内容的示例代码

// 取得返回文字
var subInnerHTML=ajaxObj.responseXML.getElementsByTagName("content")[0].xml;

// 给选项页设置文字
var tabsBodyDiv=document.getElementById("tabsBody");
tabsBodyDiv.innerHTML
=subInnerHTML;


3.当前项的切换

Tabview还有一个视觉上的功能是突出显示当前选项卡,这个我们可以通过JS修改菜单的class来实现.
菜单的代码如下:

Tabview还有一个视觉上的功能是突出显示当前选项卡,这个我们可以通过JS动态修改菜单的class来实现.
菜单的代码如下:
<div id="tabsHeader">
  
<ul>
    
<li><href='javascript:changeTab("date")' id="date"><span>定时取日期</span></a></li>
    
<li><href='javascript:changeTab("time")' id="time" class="current"><span class="current">定时取日期时间</span></a></li>
    
<li><href='javascript:changeTab("random")' id="random"><span>定时取随机数</span></a></li>
  
</ul>
</div>


点击菜单项后,突出当前项的代码如下,它的思路是先重置所有菜单项,再突出当前菜单项.最后进行Ajax调用更新View中的innerHtml.

function changeTab(id){
  
var tabs10Div=document.getElementById("tabsHeader");
  
  
// 将所有链接标签重置
  var linkNodes=tabs10Div.getElementsByTagName("a");
  
for(var i=0;i<linkNodes.length;i++){
    linkNodes[i].className
="";
  }

  
// 将所有Span标签重置
  var spanNodes=tabs10Div.getElementsByTagName("span");
  
for(var i=0;i<spanNodes.length;i++){
    spanNodes[i].className
="";
  }

  
// 将当前选择的链接置深
  var currentLink=document.getElementById(id);
  currentLink.className
="current";
  
  
// 将当前选择的Span置深
  var currentSpan=currentLink.getElementsByTagName("span")[0];
  currentSpan.className
="current";
    
  ajaxObj
=createAjaxObject(); 
  
var url=prjName+"FetchText?id="+id; 
  
// alert(ajaxObj);
  ajaxObj.open("Get",url,true);
  ajaxObj.onreadyStateChange
=changeTabCallBack;
  ajaxObj.send(
null); 
}


代码下载:
http://www./Files/sitinspring/TabView20080506114949.zip

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约