论tab切换的几种实现方法

  tab切换在网页中很常见,故最近总结了3中实现方法。

  首先,写出tab的框架,加上最简单的样式,代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <style>
 6   *{
 7     padding: 0;
 8     margin: 0;
 9   }
10   li{
11     list-style: none;
12     float:left;
13   }
14   #tabCon{
15     clear: both;
16   }
17 </style>
18 </head>
19 <body>
20   <div id="tanContainer">
21     <div id="tab">
22       <ul>
23         <li>标题一</li>
24         <li>标题二</li>
25         <li>标题三</li>
26         <li>标题四</li>
27       </ul>
28     </div>
29     <div id="tabCon">
30       <div>内容一</div>
31       <div>内容二</div>
32       <div>内容三</div>
33       <div>内容四</div>
34     </div>
35   </div>
36 </body>
37 </html>

  现在的显示效果如下图:

  四个tab标题和四个内容区都显示在了页面中,现在要实现tab切换效果,即点击标题一,内容一显示出来,其他内容不显示;点击标题二,内容二显示出来,其他内容不显示……

  那么,整体思路很简单,给四个标题绑定事件,触发的时候对应的内容显示,其他的内容隐藏。

  方法一:点击标题对应的内容显示,非点击标题对应的内容隐藏。代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <style>
 6   *{
 7       padding: 0;
 8       margin: 0;
 9   }
10   li{
11       list-style: none;
12   }
13 </style>
14 <script>
15   function tab(pid){
16       var tabs=["tab1","tab2","tab3","tab4"];
17       for(var i=0;i<4;i++){
18         if(tabs[i]==pid){
19             document.getElementById(tabs[i]).style.display="block";
20         }else{
21             document.getElementById(tabs[i]).style.display="none";
22         }
23       }
24   }
25 </script>
26 </head>
27 <body>
28   <div id="tanContainer">
29       <div id="tabNav">
30       <ul>
31           <li onclick="tab(‘tab1‘)">标题一</li>
32           <li onclick="tab(‘tab2‘)">标题二</li>
33           <li onclick="tab(‘tab3‘)">标题三</li>
34           <li onclick="tab(‘tab4‘)">标题四</li>
35       </ul>
36       </div>
37       <div id="tab">
38         <div id="tab1">内容一</div>
39         <div id="tab2">内容二</div>
40         <div id="tab3">内容三</div>
41         <div id="tab4">内容四</div>
42       </div>
43   </div>
44 </body>
45 </html>

  方法二:先设置所有内容隐藏,然后点击标题对用的内容显示。代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <style>
 6   *{
 7     padding: 0;
 8     margin: 0;
 9   }
10   li{
11     list-style: none;
12     float:left;
13   }
14   #tabCon{
15     clear: both;
16   }
17   #tabCon_1{
18     display: none;
19   }
20   #tabCon_2{
21     display: none;
22   }
23   #tabCon_3{
24     display: none;
25   }
26 </style>
27 <script>
28   function changeTab(tabCon_num){
29     for(i=0;i<=3;i++) {
30       document.getElementById("tabCon_"+i).style.display="none"; //将所有的层都隐藏
31     }
32       document.getElementById("tabCon_"+tabCon_num).style.display="block";//显示当前层
33   }
34 </script>
35 </head>
36 <body>
37   <div id="tanContainer">
38     <div id="tab">
39       <ul>
40         <li onclick="changeTab(‘0‘)">标题一</li>
41         <li onclick="changeTab(‘1‘)">标题二</li>
42         <li onclick="changeTab(‘2‘)">标题三</li>
43         <li onclick="changeTab(‘3‘)">标题四</li>
44       </ul>
45     </div>
46     <div id="tabCon">
47       <div id="tabCon_0">内容一</div>
48       <div id="tabCon_1">内容二</div>
49       <div id="tabCon_2">内容三</div>
50       <div id="tabCon_3">内容四</div>
51     </div>
52   </div>
53 </body>
54 </html>

  方法三:显示和隐藏通过是有拥有class控制,先把所有的内容隐藏dispaly设为none,而该class的display设置为block,遍历所有标题节点和内容节点,点击标题后,该标题节点和对用的内容节点拥有class,其他的没有。代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <style>
 6   *{
 7     padding: 0;
 8     margin: 0;
 9   }
10   li{
11     list-style: none;
12     float:left;
13   }
14   #tabCon {
15     clear: both;
16   }
17   #tabCon div {
18     display:none;
19   }
20   #tabCon div.fdiv {
21     display:block;
22   }
23 </style>
24 </head>
25 <body>
26   <div id="tanContainer">
27     <div id="tab">
28       <ul>
29         <li class="fli">标题一</li>
30         <li>标题二</li>
31         <li>标题三</li>
32         <li>标题四</li>
33       </ul>
34     </div>
35     <div id="tabCon">
36       <div class="fdiv">内容一</div>
37       <div>内容二</div>
38       <div>内容三</div>
39       <div>内容四</div>
40     </div>
41   </div>
42 </body>
43 <script>
44   var tabs=document.getElementById("tab").getElementsByTagName("li");
45   var divs=document.getElementById("tabCon").getElementsByTagName("div");
46
47   for(var i=0;i<tabs.length;i++){
48     tabs[i].onclick=function(){change(this);}
49   }
50
51   function change(obj){
52   for(var i=0;i<tabs.length;i++){
53     if(tabs[i]==obj){
54     tabs[i].className="fli";
55     divs[i].className="fdiv";
56   }else{
57     tabs[i].className="";
58     divs[i].className="";
59     }
60     }
61   }
62 </script>
63 </html>

  该方法的缺点是,内容块的div下面不能再有div标签了。

时间: 2024-10-13 12:14:11

论tab切换的几种实现方法的相关文章

react做tab切换的几种方式

最近搞一个pc端的活动,搞了一个多月,甚烦,因为相比于pc端,更喜欢移动端多一点.因为移动端又能搞我的react了. 今天主要总结一下react当中tab切换的几种方式,因为tab切换基本上都会用到.当然,你也可以在react当中用jquery或者zepto来实现,不过既然都用react了,能不能用jq,就尽量不用jq.不过不得不吐槽一下,在jquery很简单的东西,在react中稍微复杂化了一点. 目前我用到的tab切换只有两种方式,所以暂时总结这两种,以后有遇到其他的再总结. 第一种.只是子

CSS实现导航条Tab切换的三种方法

前面的话 ??导航条Tab在页面中非常常见,本文说详细介绍CSS实现导航条Tab的三种方法 布局 ??根据上图所示,先规定几个定义,上图的模块整体叫做导航,由导航标题和导航内容组成.要实现上图所示的布局效果,有两种布局方法:语义布局和视觉布局 [语义布局] ??从语义布局的角度来看,每一个导航标题和其对应的导航内容应该是一个整体 <style> body,p{margin: 0;} h2{margin: 0;font-size:100%;} ul{margin: 0;padding: 0;li

tab切换的两种方法

方法一.主要使用了传递参数的思想,把循环变量不能使用转换了一下<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> .nav{ width: 100%; height: 50px; text-align: center; } .nav li{ display:

tab切换webuploader失效的解决方法

<script type="text/javascript"> $(document).ready(function () { $('#tt').tabs({ border: true, onSelect: function (title, index) { if (index == 5) uploader.refresh(); } }); }); </script> 原文地址:https://www.cnblogs.com/supe/p/9457586.htm

关于scrollintoview()真的是有意思极了,结合普通tab切换一起看看

scrollIntoView(alignWithTop) 是html5新特性中的一个元素,他主要是指滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素. alignWithTop是true或者是false哦.如果alignWithTop为true,或者省略它,窗口会尽可能滚动到自身顶部与元素顶部平齐. 我们见动图 见代码 scrollIntoView还可以实现类似于我们常见的tab切换的效果 一些具体的效果见动图 代码如下 使用scrollIntoView实现tab切换和直接使用jq

javascript实现选项卡切换的4种方法

方法一:for循环+if判断当前点击与自定义数组是否匹配 <html lang="en"> <head> <meta charset="UTF-8"> <title>tab切换</title> <style type="text/css"> button { width:120px; height: 32px; line-height: 32px; background-co

PySide2(PyQt5) 实现tab切换及方法详解(不定时更新)

更多分享:www.catbron.cn tab的实现用到的是QTabWidget控件,以下仅做简单的演示 源码: import sys from PySide2 import QtCore, QtGui, QtWidgets class MainWindow(): def __init__(self): self.window = QtWidgets.QMainWindow() self.initSize(0.6) self.mainWidget = QtWidgets.QWidget() se

Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个layout 什么layout都可以 加个Id 叫container package com.example.demoforactionbar; import android.app.ActionBar; import android.app.Activity; import android.app.

Vue框架tab切换高亮最简易方法

以往我们实现tab切换高亮通常是循环遍历先把所有的字体颜色改变为默认样式,再点亮当前点击的选项,而我们在vue框架中实现tab切换高亮显示并不需要如此,只需要将当前点击选项的index传入给一个变量,再将这个变量和当前index匹配,若true则显示高亮,否则默认样式,代码如下: 如需转载请注明出处:http://www.cnblogs.com/zishang91/p/7580204.html,以便有错误可以及时修改,若有错漏不足之处,请见谅并且指点,谢谢!!!