javascript实现tab切换的四种方法


Posted in Javascript onNovember 05, 2015

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

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

<!DOCTYPE html>
 <html>
 <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
 *{
 padding: 0;
 margin: 0;
 }
 li{
 list-style: none;
 float:left;
 }
 #tabCon{
 clear: both;
 }
 </style>
 </head>
 <body>
 <div id="tanContainer">
 <div id="tab">
 <ul>
 <li>标题一</li>
 <li>标题二</li>
 <li>标题三</li>
 <li>标题四</li>
 </ul>
 </div>
 <div id="tabCon">
 <div>内容一</div>
 <div>内容二</div>
 <div>内容三</div>
 <div>内容四</div>
 </div>
 </div>
 </body>
 </html>

现在的显示效果如下图:

javascript实现tab切换的四种方法

四个tab标题和四个内容区都显示在了页面中,现在要实现tab切换效果,即点击标题一,内容一显示出来,其他内容不显示;点击标题二,内容二显示出来,其他内容不显示……
那么,整体思路很简单,给四个标题绑定事件,触发的时候对应的内容显示,其他的内容隐藏。

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

<!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style>
 *{
 padding: 0;
 margin: 0;
 }
 li{
 list-style: none;
 }
 </style>
 <script>
 function tab(pid){
 var tabs=["tab1","tab2","tab3","tab4"];
 for(var i=0;i<4;i++){
 if(tabs[i]==pid){
 document.getElementById(tabs[i]).style.display="block";
 }else{
 document.getElementById(tabs[i]).style.display="none";
 }
 }
 }
 </script>
</head>
 <body>
 <div id="tanContainer">
 <div id="tabNav">
 <ul>
 <li onclick="tab('tab1')">标题一</li>
 <li onclick="tab('tab2')">标题二</li>
 <li onclick="tab('tab3')">标题三</li>
 <li onclick="tab('tab4')">标题四</li>
 </ul>
 </div>
 <div id="tab">
 <div id="tab1">内容一</div>
 <div id="tab2">内容二</div>
 <div id="tab3">内容三</div>
 <div id="tab4">内容四</div>
 </div>
 </div>
 </body>
 </html>

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

<!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style>
 *{
 padding: 0;
 margin: 0;
 }
 li{
 list-style: none;
 float:left;
 }
 #tabCon{
 clear: both;
 }
 #tabCon_1{
 display: none;
 }
 #tabCon_2{
 display: none;
 }
 #tabCon_3{
 display: none;
 }
 </style>
 <script>
 function changeTab(tabCon_num){
 for(i=0;i<=3;i++) { 
 document.getElementById("tabCon_"+i).style.display="none"; //将所有的层都隐藏 
 } 
 document.getElementById("tabCon_"+tabCon_num).style.display="block";//显示当前层 
 } 
 </script>
 </head>
 <body>
 <div id="tanContainer">
 <div id="tab">
 <ul>
 <li onclick="changeTab('0')">标题一</li>
 <li onclick="changeTab('1')">标题二</li>
 <li onclick="changeTab('2')">标题三</li>
 <li onclick="changeTab('3')">标题四</li>
 </ul>
 </div>
 <div id="tabCon">
 <div id="tabCon_0">内容一</div>
 <div id="tabCon_1">内容二</div>
 <div id="tabCon_2">内容三</div>
 <div id="tabCon_3">内容四</div>
 </div>
 </div>
 </body>
 </html>

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

<!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style>
 *{
 padding: 0;
 margin: 0;
 }
 li{
 list-style: none;
 float:left;
 }
 #tabCon {
 clear: both;
 }
 #tabCon div {
 display:none;
 }
 #tabCon div.fdiv {
 display:block;
 }
 </style>
 </head>
 <body>
 <div id="tanContainer">
 <div id="tab">
 <ul>
 <li class="fli">标题一</li>
 <li>标题二</li>
 <li>标题三</li>
 <li>标题四</li>
 </ul>
 </div>
 <div id="tabCon">
 <div class="fdiv">内容一</div>
 <div>内容二</div>
 <div>内容三</div>
 <div>内容四</div>
 </div>
 </div>
 </body>
 <script>
 var tabs=document.getElementById("tab").getElementsByTagName("li");
 var divs=document.getElementById("tabCon").getElementsByTagName("div");

 for(var i=0;i<tabs.length;i++){
 tabs[i].onclick=function(){change(this);}
 }

 function change(obj){
 for(var i=0;i<tabs.length;i++){
 if(tabs[i]==obj){
 tabs[i].className="fli";
 divs[i].className="fdiv";
 }else{
 tabs[i].className="";
 divs[i].className="";
 }
 }
 } 
 </script>
 </html>

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

方法四:不用js,用“input:checked”来做tab切换,先把所有的内容隐藏,被选中的内容显示。代码如下:

<!DOCTYPE html>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>input:checked实现tab切换</title>
 <style>
 input{
 opacity: 0;/*隐藏input的选择框*/
 }
 label{
 cursor: pointer;/*鼠标移上去变成手状*/
 float: left;
 }
 label:hover{
 background: #eee;
 }
 input:checked+label{
 color: red;
 }
 /*选择前面有.tabs input:nth-of-type(x):checked的.panels .panel:nth-child(x)*/
 .tabs input:nth-of-type(1):checked~.panels .panel:nth-child(1),
 .tabs input:nth-of-type(2):checked~.panels .panel:nth-child(2){
 opacity: 1;
 }
 .panel{
 opacity: 0;
 position: absolute;/*使内容区域位置一样*/
 }
 </style>
 </head>
 <body>
 <div class="tabs">
 <input checked id="one" name="tabs" type="radio">
 <label for="one">标题一</label>
 
 <input id="two" name="tabs" type="radio">
 <label for="two">标题二</label>
 
 <div class="panels">
 <div class="panel">
 <p>内容一</p>
 </div>
 <div class="panel">
 <p>内容二</p>
 </div>
 </div>
 </div>
 </body>
 </html>

该方法的缺点是,不同区域切换只能通过点击。

如果大家还想深入学习,可以点击两个精彩的专题:javascript选项卡操作方法汇总 jquery选项卡操作方法汇总

以上就是为大家总结的tab切换实现方法,希望对大家的学习有所帮助,顺着这个思路动手制作自己tab切换特效。

Javascript 相关文章推荐
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
vue之数据交互实例代码
Jun 20 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
Aug 23 jQuery
webpack构建的详细流程探底
Jan 08 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
Nov 25 Javascript
vue element 关闭当前tab 跳转到上一路由操作
Jul 22 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 #Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 #Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 #Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 #Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 #Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 #Javascript
JS实现slide文字框缩放伸展效果代码
Nov 05 #Javascript
You might like
php开发环境配置记录
2011/01/14 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
Python实现简单HTML表格解析的方法
2015/06/15 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
python实现感知器
2017/12/19 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Django Rest framework权限的详细用法
2019/07/25 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
教育基金募捐倡议书
2014/05/14 职场文书
重阳节座谈会主持词
2015/07/03 职场文书