CSS+JavaScript 实现TabPane页签

CSS+JavaScript 实现TabPane页签

马嘉楠    2008-12-30

 

共同学习,欢迎转载。转载请注明地址【http://blog.csdn.net/majianan/archive/2008/12/30/3646565.aspx】,谢谢!

 

CSS+JavaScript 实现TabPane页签功能,支持二级tabPane(tabPane嵌套)。

如果标题的长度大于设置的width值,则用“...”来显示。但是FF不支持该效果,由于CSS水平有限,暂时没有修改!-  -

 

效果如下图:

1.

 

  • 使用前提,在HTML页面中引入一个CSS文件,和一个JavaScript文件。如下:
  1.  <HEAD>
  2.   <TITLE>Css + Javascript = tabPane</TITLE>
  3.   <META NAME="Author" CONTENT="majianan">
  4.   <script type="text/javascript" src="tabPane.js"></script>
  5.     <link type="text/css" rel="stylesheet"  href="tabPane.css"  />
  6.  </HEAD>

引入CSS文件:<link type="text/css" rel="stylesheet"  href="tabPane.css"  />

引入JavaScript文件:<script type="text/javascript" src="tabPane.js"></script>

代码见后

 

  • 对于每一个tab页分别创建一个DIV来显示。例如代码中的"testTabDiv"、"basicInfo"、"btns1"等
  1. <BODY>
  2.     
  3. <div id="testTabDiv" style="width:800px;"></div>
  4. <div id="basicInfo" style="padding:8px;">       
  5.     <table>
  6.         <tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
  7.         <tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
  8.         <tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
  9.         <tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>         
  10.         <tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
  11.         <tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
  12.         <tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
  13.     </table>
  14. </div>
  15. <div id="btns" style="padding:8px;"></div> 
  16. <div id="myBlog" style="padding:8px;">
  17.  <iframe src="http://www.baidu.com" style="width:95%;height:500">
  18. </iframe>
  19. </div> 
  20. <div id="btns1" style="padding:8px;">
  21.     <table border="0" cellpadding="0" cellspacing="1" class="border5"  bgcolor="#BCDDF8">
  22.         <tr id="trEdit">
  23.             <td><input class="button" type="button" value="Edit" style="width:100px"></td>
  24.         </tr>
  25.         <tr id="trDel">
  26.             <td><input class="button" type="button" value="Delete" style="width:100px"></td>
  27.         </tr>
  28.     </table>
  29. </div> 
  30. <div id="basicInfo1" style="padding:8px;">      
  31. <table>     
  32.     <tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
  33.     <tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
  34.     <tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
  35. </table>
  36. </div>
  37. <div id="basicInfo2" style="padding:8px;height:300">        
  38. <table>
  39.     <tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
  40.     <tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
  41.     <tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
  42.     <tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>
  43. </table>
  44. </div>
  45.  </BODY>
  46.  <script>
  47.     var tp = new TabPane("testTabDiv");
  48.     tp.addTabPage({title:"Test New Func" ,width:100 ,panel:"basicInfo"});
  49.     tp.addTabPage({title:"CSDN Blog Web JavaScript" ,width:100 ,panel:"btns"});     
  50.     tp.addTabPage({title:"My Blog URL" ,width:100 ,panel:"myBlog"});
  51.         
  52.     tp = new TabPane("btns");
  53.     tp.addTabPage({title:"basicInfo1" ,width:150 ,panel:"basicInfo1"});
  54.     tp.addTabPage({title:"basicInfo2" ,width:150 ,panel:"basicInfo2"});
  55.     tp.addTabPage({title:"btns1" ,width:150 ,panel:"btns1"});
  56.     </script>
  • 生成tab页JavaScript代码说明:

1)var tp = new TabPane("testTabDiv");

    创建一个tab页,参数为一个String:目标DIV的id。

2) tp.addTabPage({title:"Test New Func" ,width:100 ,panel:"basicInfo"});

    向tab页中添加内容。

    参数为一个Object:包括title、width、panel等属性。

        title:tab页显示的标题。

        width:设置标题的宽度。

        panel:tab页中所要显示的DIV.id。

3)二级tab页,只需要重复上面操作即可。例如

    tp = new TabPane("btns");

    tp.addTabPage({title:"basicInfo1" ,width:150 ,panel:"basicInfo1"});

    tp.addTabPage({title:"basicInfo2" ,width:150 ,panel:"basicInfo2"});

    tp.addTabPage({title:"btns1" ,width:150 ,panel:"btns1"});

4)DIV的默认style为:

  1. div{
  2.   width:    100%;
  3.   height:   auto;
  4. }

也可以在DIV中特殊说明,例如:<div id="basicInfo2" style="padding:8px;height:300">        

 

 

测试代码

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3.  <HEAD>
  4.   <TITLE>Css + Javascript = tabPan</TITLE>
  5.   <META NAME="Author" CONTENT="majianan">
  6.   <script type="text/javascript" src="tabPane.js"></script>
  7.     <link type="text/css" rel="stylesheet"  href="tabPane.css"  />
  8.  </HEAD>
  9. <BODY>
  10.     
  11. <div id="testTabDiv" style="width:800px;"></div>
  12. <div id="basicInfo" style="padding:8px;">       
  13.     <table>
  14.         <tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
  15.         <tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
  16.         <tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
  17.         <tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>         
  18.         <tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
  19.         <tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
  20.         <tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
  21.     </table>
  22. </div>
  23. <div id="btns" style="padding:8px;"></div> 
  24. <div id="myBlog" style="padding:8px;">
  25.  <iframe src="http://www.baidu.com" style="width:95%;height:500">
  26. </iframe>
  27. </div> 
  28. <div id="btns1" style="padding:8px;">
  29.     <table border="0" cellpadding="0" cellspacing="1" class="border5"  bgcolor="#BCDDF8">
  30.         <tr id="trEdit">
  31.             <td><input class="button" type="button" value="Edit" style="width:100px"></td>
  32.         </tr>
  33.         <tr id="trDel">
  34.             <td><input class="button" type="button" value="Delete" style="width:100px"></td>
  35.         </tr>
  36.     </table>
  37. </div> 
  38. <div id="basicInfo1" style="padding:8px;">      
  39. <table>     
  40.     <tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
  41.     <tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
  42.     <tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
  43. </table>
  44. </div>
  45. <div id="basicInfo2" style="padding:8px;height:300">        
  46. <table>
  47.     <tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
  48.     <tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
  49.     <tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
  50.     <tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>
  51. </table>
  52. </div>
  53.  </BODY>
  54.  <script>
  55.     var tp = new TabPane("testTabDiv");
  56.     tp.addTabPage({title:"Test New Func" ,width:100 ,panel:"basicInfo"});
  57.     tp.addTabPage({title:"CSDN Blog Web JavaScript" ,width:100 ,panel:"btns"});     
  58.     tp.addTabPage({title:"My Blog URL" ,width:100 ,panel:"myBlog"});
  59.         
  60.     tp = new TabPane("btns");
  61.     tp.addTabPage({title:"basicInfo1" ,width:150 ,panel:"basicInfo1"});
  62.     tp.addTabPage({title:"basicInfo2 CSDN Blog" ,width:100 ,panel:"basicInfo2"});
  63.     tp.addTabPage({title:"btns1" ,width:150 ,panel:"btns1"});
  64.     </script>
  65. </HTML>

 

 

tabPane.js

 

  1. var TabPaneConfig = {
  2.     idPrefix: "tab-panel-object-",
  3.     idCounter: 0,
  4.     getId: function(){ return this.idPrefix+this.idCounter++;},
  5.     tabHeadId: "tabHead",
  6.     tabHeadClass: "tab-head tab-border",
  7.     tabBodyId: "tabBody",
  8.     tabBodyClass: "tab-border"
  9. }
  10. function TabPane(id){
  11.     this.id = id;
  12.     this.height = "100%";
  13.     this.width = "100%";
  14.     
  15.     this.tabPages = 0;
  16.     this.head = null;
  17.     this.body = null;   
  18. }
  19. TabPane.prototype.init = function(){    
  20.     var r = document.getElementById(this.id);
  21.     if(!r.style.overflow)   r.style.overflow = "auto";
  22.     r.className = "tab";
  23.     
  24.     //create head
  25.     var div = document.createElement("div");
  26.     div.id = TabPaneConfig.tabHeadId;
  27.     div.className = TabPaneConfig.tabHeadClass;
  28.     
  29.     r.appendChild(div);
  30.     this.head = div;
  31.     
  32.     var ul = document.createElement("ul");
  33.     div.appendChild(ul);
  34.     
  35.     //create body
  36.     div = document.createElement("div");
  37.     div.id = TabPaneConfig.tabBodyId;
  38.     div.className = TabPaneConfig.tabBodyClass;
  39.     
  40.     r.appendChild(div); 
  41.     this.body = div;
  42. }
  43. TabPane.prototype.addTabPage = function(obj){
  44.     if(!document.getElementById(obj.panel)) return;
  45.     if(!this.tabPages)  this.init();    
  46.         
  47.     this.head.firstChild.appendChild(this.createTabTitle(obj));
  48.     this.body.appendChild(document.getElementById(obj.panel));  
  49.     this.tabPages++;
  50. }
  51. TabPane.prototype.createTabTitle = function(obj){
  52.     var li = document.createElement("li");
  53.     li.id = TabPaneConfig.getId();  
  54.     li.data = obj.panel;
  55.     li.οnclick=tabOnClick;
  56.     li.style.width = obj.width;
  57.     
  58.     if(this.tabPages){
  59.         li.className="";
  60.         document.getElementById(obj.panel).style.display="none";    
  61.     }else{
  62.         li.className="hover";
  63.         document.getElementById(obj.panel).style.display="block";   
  64.     }
  65.         
  66.     var textNode = document.createTextNode(obj.title);
  67.     li.appendChild(textNode);
  68.     
  69.     return li;
  70. }
  71. function tabOnClick(){  
  72.   var event = window.event || arguments[0];
  73.   var element = event.srcElement || event.target;  
  74.     var liArr = element.parentNode.getElementsByTagName("li");
  75.     for(var i=0; i<liArr.length; i++){
  76.         liArr[i].className="";
  77.         document.getElementById(liArr[i].data).style.display="none";
  78.     }
  79.     element.className="hover";  
  80.     document.getElementById(element.data).style.display="block";
  81. }

tabPane.css

 

  1. div{
  2.     width:  100%;
  3.     heightauto;
  4. }
  5. .tab {
  6.     font-family:    VerdanaHelveticaArial;
  7.     font-size:      12px;
  8.     position:   relative;
  9.     width:      100%;
  10. }
  11. .tab-border {border:1px solid;border-colorrgb(120,172,255);}
  12. .tab-head {
  13.     background-color:rgb(234,242,255);;
  14.     border:0px;
  15.     height:23px;
  16.     line-height:20px;
  17.     position:relative;  
  18. }
  19. .tab-head ul{
  20.     border:0px;
  21.     height:23px;
  22.     list-style:none;     
  23.     margin:0px;     
  24.     text-align:center;
  25.     padding:0;
  26.     position:absolute;
  27.     
  28. }
  29. .tab-head li{   
  30.     border1px solid;
  31.     border-color:   rgb(120,172,255);
  32.     border-left:    0;
  33.     border-bottom:  0;
  34.     border-top:     0;
  35.     cursor:pointer;
  36.     color:#416AA3;  
  37.     float:left;
  38.     display:block;
  39.     height:22px;!important;height:20px;
  40.     line-height:20px
  41.     padding:        2px 6px 0px 6px;
  42.     margin-top2px;
  43.     margin-right:   -1px;
  44.     text-overflow:ellipsis; 
  45.     white-space:nowrap
  46.     overflow:hidden;
  47. }
  48. .tab-head li.hover{
  49.     border:         1px solid rgb(120,172,255);
  50.     border-bottom:  0;
  51.     padding:        0px 6px 3px 6px;
  52.     margin:         0px 1px 0px 0px;
  53.     background:     white;
  54.     font-size:          13px;
  55.     font-weight:    bold;
  56.     color:              rgb(0,66,174);
  57.     overflow:visible;   
  58. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值