用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
majianan的公告
-------------------------------<br /> <div align="left"> <p><font color="blue">Oo缘来是你oO </font>博客空间内所有 文章除特别声明为 <font color="blue">(转载)</font>,均为作者的学习心得和原创作品。如要转载,请注明作者名<font color="blue">马嘉楠</font> 及 <font color="blue">原文地址</font>,谢谢!</p> </div> -------------------------------<br /> <h5>联系方式</h5> <br /> <div style="margin-top: 10px"> <img title="52524611@QQ.com" alt="" src="http://services.nexodyne.com/email/icon/gXHQZkzx3%2Bs%3D/GOQS5f0%3D/UVE%3D/0/image.png" border="0" /> <img title="jianan.ma@gmail" alt="" src="http://services.nexodyne.com/email/icon/eNxng175bNPI/Yf4fwHs%3D/R01haWw%3D/0/image.png" border="0" /> <img title="majianan_1983@hotmail.com" alt="" src="http://services.nexodyne.com/email/icon/1MYph7lFzJmppOeMsg%3D%3D/WNTDl6Y%3D/SG90bWFpbA%3D%3D/0/image.png" border="0" /> </div> <br /> <br /> -------------------------------<br /> <script src="http://s68.cnzz.com/stat.php?id=1194936&web_id=1194936&show=pic1" language="JavaScript" charset="gb2312"></script>
文章分类
Blog
【01】Flyingis
【02】TerryLee's Tech Space
【03】布尔的cnblogs boolean
【04】meizz(梅花雪)的专栏
【05】孟子E章
【06】cloudgamer
【07】老韩
【08】岳麓听雨的专栏
【09】AJAXBBS.NET Yemoo'S Blog
JavaScript
【01】Javascript.about.com
【02】Javascript Toolbox
【03】JavaScript Source
【04】JavaScript Kit
【05】O'Reilly : JavaScript
【06】JavaScript and Ajax Tips &amp; Tutorials
【07】DIY部落
【08】Nettuts+
【09】Rhino - JavaScript for Java
JQuery
【01】jquery.com
【02】docs.jquery.com
JSON
【01】json.org
Prototype
【01】Prototype URL
【02】Prototype API
【03】Developer Notes for prototype.js(version 1.5.0)
Web
【01】CssRain
【02】网页设计师
【03】EarthWeb.com: The IT Industry Portal  
【04】布啦布啦
【05】CSS论坛
代码优化系列文章
【Java】如何让你的程序运行的更快(1)---"String" VS "StringBuffer"
【Java】如何让你的程序运行的更快(1)之续---揭秘StringBuffer的capacity
【JavaScript】JavaScript中字符串连接性能优化
教程
开源
Java开源大全
开源人
论坛
【01】CSDN 社区中心
【02】疯狂Java联盟
【03】JavaEye论坛
【04】IBM developerWorks 中国
【05】51JS -- 无忧脚本
存档

原创  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.onclick=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. }

发表于 @ 2008年12月30日 13:21:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:【JavaScript】时间显示 | 新一篇:【JavaScript】列表(Select)选项(Option)的移动(上下左右)

  • 发表评论
  • 评论内容:
  •  
Copyright © majianan
Powered by CSDN Blog