常见选项卡内容切换+折叠+展开效果实现
1.选项卡效果预览
2.源码与简要说明
<!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>切换选项卡功能实现</title> 6 <link rel="stylesheet" href="css/switchTab.css" /> 7 </head> 8 <body> 9 <div class="nav-tab"> 10 <ul class="main-tab" id="nav-tab"> 11 <li class="active" index="0"> 12 <a href="#none"><p>星期一</p><p>11-07</p></a> 13 </li> 14 <li index="1"><a href="#none"><p>星期二</p><p>11-08</p></a></li> 15 <li index="2"><a href="#none"><p>星期三</p><p>11-09</p></a></li> 16 <li index="3"><a href="#none"><p>星期四</p><p>11-10</p></a></li> 17 <li index="4"><a href="#none"><p>星期五</p><p>11-11</p></a></li> 18 <li index="5"><a href="#none"><p>星期六</p><p>11-12</p></a></li> 19 <li index="6"><a href="#none"><p>星期日</p><p>11-13</p></a></a></li> 20 </ul> 21 </div> 22 <div class="tab-content"> 23 <div class="table-div" style="display: block;" tab-index="0"> 24 <table cellpadding="0" cellspacing="0" border="0" class="table"> 25 <colgroup> 26 <col align="left" width="40%"/> 27 <col align="left" width="30%"/> 28 <col align="right" width="30%"/> 29 </colgroup> 30 <thead> 31 <tr> 32 <td>播出频道</td> 33 <td>时间</td> 34 <td>节目</td> 35 </tr> 36 </thead> 37 <tbody> 38 <tr> 39 <td>安徽卫视</td> 40 <td>2016/11/07</td> 41 <td>天气预报</td> 42 </tr> 43 <tr> 44 <td>CCTV</td> 45 <td>2016/11/07</td> 46 <td>天气预报</td> 47 </tr> 48 <tr> 49 <td>广东卫视</td> 50 <td>2016/11/07</td> 51 <td>天气预报</td> 52 </tr> 53 <tr> 54 <td>甘肃卫视</td> 55 <td>2016/11/07</td> 56 <td>天气预报</td> 57 </tr> 58 </tbody> 59 </table> 60 </div> 61 <div class="table-div" style="display: none;" tab-index="0"> 62 <table cellpadding="0" cellspacing="0" border="0" class="table"> 63 <colgroup> 64 <col align="left" width="40%"/> 65 <col align="left" width="30%"/> 66 <col align="right" width="30%"/> 67 </colgroup> 68 <thead> 69 <tr> 70 <td>播出频道</td> 71 <td>时间</td> 72 <td>节目</td> 73 </tr> 74 </thead> 75 <tbody> 76 <tr> 77 <td>安徽卫视</td> 78 <td>2016/11/07</td> 79 <td>天气预报</td> 80 </tr> 81 <tr> 82 <td>CCTV</td> 83 <td>2016/11/07</td> 84 <td>天气预报</td> 85 </tr> 86 <tr> 87 <td>广东卫视</td> 88 <td>2016/11/07</td> 89 <td>天气预报</td> 90 </tr> 91 <tr> 92 <td>甘肃卫视</td> 93 <td>2016/11/07</td> 94 <td>天气预报</td> 95 </tr> 96 </tbody> 97 </table> 98 </div> 99 <div class="table-div" style="display: none;" tab-index="0"> 100 <table cellpadding="0" cellspacing="0" border="0" class="table"> 101 <colgroup> 102 <col align="left" width="40%"/> 103 <col align="left" width="30%"/> 104 <col align="right" width="30%"/> 105 </colgroup> 106 <thead> 107 <tr> 108 <td>播出频道</td> 109 <td>时间</td> 110 <td>节目</td> 111 </tr> 112 </thead> 113 <tbody> 114 <tr> 115 <td>安徽卫视</td> 116 <td>2016/11/07</td> 117 <td>天气预报</td> 118 </tr> 119 <tr> 120 <td>CCTV</td> 121 <td>2016/11/07</td> 122 <td>天气预报</td> 123 </tr> 124 <tr> 125 <td>广东卫视</td> 126 <td>2016/11/07</td> 127 <td>天气预报</td> 128 </tr> 129 <tr> 130 <td>甘肃卫视</td> 131 <td>2016/11/07</td> 132 <td>天气预报</td> 133 </tr> 134 <tr> 135 <td>安徽卫视</td> 136 <td>2016/11/07</td> 137 <td>天气预报</td> 138 </tr> 139 <tr> 140 <td>CCTV</td> 141 <td>2016/11/07</td> 142 <td>天气预报</td> 143 </tr> 144 <tr> 145 <td>广东卫视</td> 146 <td>2016/11/07</td> 147 <td>天气预报</td> 148 </tr> 149 <tr class="last-no-border"> 150 <td>甘肃卫视</td> 151 <td>2016/11/07</td> 152 <td>天气预报</td> 153 </tr> 154 </tbody> 155 </table> 156 </div> 157 <div class="table-div" style="display: none;" tab-index="1"> 158 <table cellpadding="0" cellspacing="0" border="0" class="table"> 159 <thead> 160 <tr> 161 <td>播出频道</td> 162 <td>时间</td> 163 <td>节目</td> 164 </tr> 165 </thead> 166 <tbody> 167 <tr> 168 <td>安徽卫视</td> 169 <td>2016/11/08</td> 170 <td>天气预报</td> 171 </tr> 172 <tr> 173 <td>CCTV</td> 174 <td>2016/11/08</td> 175 <td>天气预报</td> 176 </tr> 177 </tbody> 178 </table> 179 </div> 180 <div class="table-div" style="display: none;" tab-index="2"> 181 <table cellpadding="0" cellspacing="0" border="0" class="table"> 182 <thead> 183 <tr> 184 <td>播出频道</td> 185 <td>时间</td> 186 <td>节目</td> 187 </tr> 188 </thead> 189 <tbody> 190 <tr> 191 <td>安徽卫视</td> 192 <td>2016/11/09</td> 193 <td>天气预报</td> 194 </tr> 195 <tr> 196 <td>CCTV</td> 197 <td>2016/11/09</td> 198 <td>天气预报</td> 199 </tr> 200 </tbody> 201 </table> 202 </div> 203 <div class="table-div" style="display: none;" tab-index="3"> 204 <table cellpadding="0" cellspacing="0" border="0" class="table"> 205 <thead> 206 <tr> 207 <td>播出频道</td> 208 <td>时间</td> 209 <td>节目</td> 210 </tr> 211 </thead> 212 <tbody> 213 <tr> 214 <td>安徽卫视</td> 215 <td>2016/11/10</td> 216 <td>天气预报</td> 217 </tr> 218 <tr> 219 <td>CCTV</td> 220 <td>2016/11/10</td> 221 <td>天气预报</td> 222 </tr> 223 </tbody> 224 </table> 225 </div> 226 <div class="table-div" style="display: none;" tab-index="4"> 227 <table cellpadding="0" cellspacing="0" border="0" class="table"> 228 <thead> 229 <tr> 230 <td>播出频道</td> 231 <td>时间</td> 232 <td>节目</td> 233 </tr> 234 </thead> 235 <tbody> 236 <tr> 237 <td>安徽卫视</td> 238 <td>2016/11/11</td> 239 <td>天气预报</td> 240 </tr> 241 <tr> 242 <td>CCTV</td> 243 <td>2016/11/11</td> 244 <td>天气预报</td> 245 </tr> 246 </tbody> 247 </table> 248 </div> 249 <div class="table-div" style="display: none;" tab-index="5"> 250 <table cellpadding="0" cellspacing="0" border="0" class="table"> 251 <thead> 252 <tr> 253 <td>播出频道</td> 254 <td>时间</td> 255 <td>节目</td> 256 </tr> 257 </thead> 258 <tbody> 259 <tr> 260 <td>安徽卫视</td> 261 <td>2016/11/12</td> 262 <td>天气预报</td> 263 </tr> 264 <tr> 265 <td>CCTV</td> 266 <td>2016/11/12</td> 267 <td>天气预报</td> 268 </tr> 269 </tbody> 270 </table> 271 </div> 272 <div class="table-div" style="display: none;" tab-index="5"> 273 <table cellpadding="0" cellspacing="0" border="0" class="table"> 274 <thead> 275 <tr> 276 <td>播出频道</td> 277 <td>时间</td> 278 <td>节目</td> 279 </tr> 280 </thead> 281 <tbody> 282 <tr> 283 <td>安徽卫视</td> 284 <td>2016/11/12</td> 285 <td>天气预报</td> 286 </tr> 287 <tr> 288 <td>CCTV</td> 289 <td>2016/11/12</td> 290 <td>天气预报</td> 291 </tr> 292 </tbody> 293 </table> 294 </div> 295 <div class="table-div" style="display: none;" tab-index="6"> 296 <table cellpadding="0" cellspacing="0" border="0" class="table"> 297 <thead> 298 <tr> 299 <td>播出频道</td> 300 <td>时间</td> 301 <td>节目</td> 302 </tr> 303 </thead> 304 <tbody> 305 <tr> 306 <td>安徽卫视</td> 307 <td>2016/11/13</td> 308 <td>天气预报</td> 309 </tr> 310 <tr> 311 <td>CCTV</td> 312 <td>2016/11/13</td> 313 <td>天气预报</td> 314 </tr> 315 </tbody> 316 </table> 317 </div> 318 <div class="div-buttn btn-show" button-index="0"> 319 显示全部<i class="c-icon c-icon-bottom"></i> 320 </div> 321 <div class="div-buttn btn-collapse" style="display: none;" button-index="0"> 322 折叠<i class="c-icon c-icon-top"></i> 323 </div> 324 </div> 325 326 <script type="text/javascript" src="./js/lib/jquery-3.1.1.min.js"></script> 327 <!--时间:2016-11-09 作者:zhangjiangfeng 描述:选项卡jQuery版本实现 --> 328 <!--<script type="text/javascript" src="js/switchTab-jQuery.js" ></script> 329 <!--时间:2016-11-12 作者:zhangjiangfeng 描述:选项卡原生js版本实现 --> 330 <script type="text/javascript" src="js/switchTab-javaScript.js" ></script> 331 </body> 332 </html>
/** 2 * Author Zhangjiangfeng 3 * Date 2016/11/9 PM 20:35 night 4 * 选项卡样式实现 5 */ 6 html { 7 font-family: "微软雅黑"; 8 font-size: 12px; 9 } 10 div, ul, li, p, a { 11 margin: 0; 12 padding: 0; 13 } 14 .nav-tab { 15 width: 565px; 16 height: 54px; 17 background-color: #fafafa; 18 position: relative; 19 display: inline-block; 20 } 21 ul.main-tab { 22 list-style: none; 23 margin: 0; 24 padding: 0; 25 height: 100%; 26 font-size: 0; /*消除display: inline-block间隙*/ 27 border-bottom: 1px solid #d9d9d9; 28 margin-bottom: -2px; 29 } 30 ul.main-tab li { 31 display: inline-block; 32 height: 48px; 33 padding-top: 4px; 34 border-width: 2px 1px 0; 35 border-color: #999; 36 border-style: solid; 37 border-color: rgba(0,0,0,0); 38 _border-color:tomato; 39 _filter:chroma(color=#ff6347); 40 } 41 ul.main-tab li a { 42 display: inline-block; 43 height: 100%; 44 text-decoration: none; 45 color: #333; 46 } 47 48 ul.main-tab li p { 49 font-size: 12px; 50 line-height: 20px; 51 padding: 0 20px; 52 } 53 /*利用边框的透明从而减少li盒子计算样式*/ 54 ul.main-tab li { 55 border-width: 2px 1px 0; 56 border-top-color: #19A6A6; 57 border-left-color: #d9d9d9; 58 border-right-color: #d9d9d9; 59 border-style: solid; 60 border-color: rgba(0,0,0,0); 61 } 62 /* ul.main-tab li:hover { 63 border-width: 2px 1px 0; 64 border-top-color: #19A6A6; 65 border-left-color: #d9d9d9; 66 border-right-color: #d9d9d9; 67 border-bottom: #FFFFFF; 68 border-style: solid; 69 background-color: #FFFFFF; 70 }*/ 71 /*选项卡选中样式*/ 72 ul.main-tab li.active { 73 border-width: 2px 1px 0; 74 border-top-color: #19A6A6; 75 border-left-color: #d9d9d9; 76 border-right-color: #d9d9d9; 77 border-bottom: #FFFFFF; 78 border-style: solid; 79 background-color: #FFFFFF; 80 } 81 82 /*选项卡内容样式*/ 83 .tab-content { 84 width: 543px; 85 min-height: 250px; 86 border: 1px solid #d9d9d9; 87 border-top: none; 88 padding: 10px; 89 position: relative; 90 } 91 .table { 92 width: 100%; 93 display: table; 94 border-collapse: collapse; 95 border: 0; 96 } 97 .table tr td { 98 padding: 10px; 99 border-bottom: solid 1px #d9d9d9; 100 } 101 .table tr.last-no-border td { 102 border-bottom: none; 103 } 104 .div-buttn { 105 width: 100%; 106 height: 30px; 107 cursor: pointer; 108 line-height: 30px; 109 text-align: center; 110 background-color: #fafafa; 111 } 112 .div-buttn i { 113 width: 14px; 114 height: 14px; 115 margin-left: 5px; 116 display: inline-block; 117 vertical-align: text-bottom; 118 font-style: normal; 119 } 120 .div-buttn i.c-icon { 121 background: url(../img/icons.png) no-repeat 0 0; 122 } 123 .div-buttn i.c-icon-bottom { 124 background-position: -71px -168px; 125 } 126 .div-buttn i.c-icon-top { 127 background-position:-96px -168px 128 } 129 .close { 130 display: none; 131 }
$(function(){ 3 var $navTab = $("#nav-tab"); //选项卡对象 4 var $tabCont = $(".tab-content"); //选项卡内容 5 var $tabContList = $tabCont.find(".table-div"); //选项卡内容列表 6 var $btnShow = $(".btn-show"); //显示全部 7 var $btnCollapse = $(".btn-collapse"); //折叠 8 //选项卡事件绑定 9 $navTab.on("click", "li", function(){ 10 var $that = $(this); 11 //获取当前索引值 12 var navIndex = $that.attr("index"); 13 //当前点击li添加active类,同级兄弟节点移除active类 14 $that.addClass("active").siblings().removeClass("active"); 15 //当当前点击选项卡navIndex值与表格列表索引tabIndex值相等时显示,否则隐藏 16 $tabContList.each(function(i){ 17 var $that = $(this); 18 var tabIndex = $that.attr("tab-index"); //表格列表索引 19 if(navIndex===tabIndex){ 20 $that.show(); 21 }else{ 22 $that.hide(); 23 } 24 }) 25 //设置显示全部与折叠按钮索引值---标识当前选中选项卡 26 $btnShow.attr("button-index",navIndex); 27 $btnCollapse.attr("button-index", navIndex); 28 }); 29 30 //显示全部 31 $btnShow.on("click", function(){ 32 var $that = $(this); 33 var btnIndex = $that.attr("button-index"); //获取当前按钮的索引值 34 $that.hide(); 35 $btnCollapse.show(); 36 $tabContList.each(function(i){ 37 var $that = $(this); 38 var tabIndex = $that.attr("tab-index"); //表格列表索引 39 if(btnIndex===tabIndex){ 40 $that.show(); 41 } 42 }) 43 }) 44 45 //折叠 46 $btnCollapse.on("click", function(){ 47 var $that = $(this); 48 var btnIndex = $that.attr("button-index"); //获取当前按钮的索引值 49 $that.hide(); 50 $btnShow.show(); 51 $tabContList.each(function(i){ 52 var $that = $(this); 53 var tabIndex = $that.attr("tab-index"); //表格列表索引 54 if(btnIndex===tabIndex){ 55 $that.hide(); 56 } 57 }) 58 }); 59 60 })
/*选项卡切换功能js实现*/ 2 window.onload = function(){ 3 var oTab = document.getElementById("nav-tab"); 4 var liArray = oTab.getElementsByTagName("li"); 5 var tabList = document.getElementsByClassName("table-div"); 6 var btnShow = document.getElementsByClassName("btn-show"); 7 var btnCollapse = document.getElementsByClassName("btn-collapse"); 8 for (var i=0; i<liArray.length; i++) { 9 liArray[i].onclick = function(){ 10 for (var j=0; j<liArray.length; j++) { 11 //移除class样式 12 liArray[j].className = ""; 13 } 14 //添加class样式 15 this.className = "active"; 16 //获取DOM索引值 17 var index = this.getAttribute("index"); 18 btnShow[0].setAttribute("button-index", index); 19 btnCollapse[0].setAttribute("button-index", index); 20 21 //内容切换 22 for (var t = 0; t<tabList.length; t++) { 23 var tableIndex = tabList[t].getAttribute("tab-index"); 24 if(index === tableIndex){ 25 tabList[t].style.display = "block"; 26 }else{ 27 tabList[t].style.display = "none"; 28 } 29 } 30 31 } 32 } 33 34 //显示全部 35 btnShow[0].onclick = function(){ 36 var btnIndex = this.getAttribute("button-index"); 37 //表格index与按钮btnIndex 38 for (var t = 0; t<tabList.length; t++) { 39 var tableIndex = tabList[t].getAttribute("tab-index"); 40 if(btnIndex === tableIndex){ 41 tabList[t].style.display = "block"; 42 } 43 } 44 this.style.display = "none"; 45 btnCollapse[0].style.display = "block"; 46 } 47 //折叠 48 btnCollapse[0].onclick = function(){ 49 var btnIndex = this.getAttribute("button-index"); 50 //表格index与按钮btnIndex 51 for (var t = 0; t<tabList.length; t++) { 52 var tableIndex = tabList[t].getAttribute("tab-index"); 53 if(btnIndex === tableIndex){ 54 tabList[t].style.display = "none"; 55 } 56 } 57 this.style.display = "none"; 58 btnShow[0].style.display = "block"; 59 60 } 61 62 }