最简单纯JavaScript实现Tab标签页切换的方式(推荐)


Posted in Javascript onJuly 25, 2016

先说一下最土的一种方法:

Html:

<div class="tab-head">
<h2 id="tab1" onmouseover="changeTab1()" class="selected">1</h2>
<h2 id="tab2" onmouseover="changeTab2()">2</h2>
<h2 id="tab3" onmouseover="changeTab3()">3</h2>
</div>
<div class="tab-content">
<div id="c1" class="show">content1</div>
<div id="c2">content2</div>
<div id="c3">content3</div>
</div>

CSS:

h2 {
border-top: solid cornflowerblue 1px;
border-left: solid cornflowerblue 1px;
width: 50px;
height: 25px;
margin: 0;
float: left;
text-align: center;
}
.tab-content {
border: solid cornflowerblue 1px;
width: 152px;
height: 100px;
}
.tab-content div{
display: none;
}
.selected {
background-color: cornflowerblue;
}
.tab-content .show{
display: block;
}

JS:

var tab1 = document.getElementById('tab1'),
tab2 = document.getElementById('tab2'),
tab3 = document.getElementById('tab3'),
c1 = document.getElementById('c1'),
c2 = document.getElementById('c2'),
c3 = document.getElementById('c3');
function changeTab1() {
tab1.className = 'selected';
tab2.className = '';
tab3.className = '';
c1.className = 'show'
c2.className = '';
c3.className = '';
}
function changeTab2() {
tab1.className = '';
tab2.className = 'selected';
tab3.className = '';
c1.className = '';
c2.className = 'show';
c3.className = '';
}
function changeTab3() {
tab1.className = '';
tab2.className = '';
tab3.className = 'selected';
c1.className = ''
c2.className = '';
c3.className = 'show';
}

效果:

最简单纯JavaScript实现Tab标签页切换的方式(推荐)

实现Tab的切换,我们很容易想到的一种方式就是给每一个要控制的标签添加id,然后分别编写鼠标事件,使用id获取每个元素,精确地控制每个元素的样式。

这种方式的缺点显而易见,有几个元素就有几个id,每个tab都要编写function,里面的方法大同小异。要增加tab的话,还要增加id和function,代码冗余,不易扩展。

第二种较为高明些的方法是编写一个function,将每个元素的序号传进去。

Html:

<div class="tab-head">
<h2 onmouseover="changeTab(0)" class="selected">1</h2>
<h2 onmouseover="changeTab(1)">2</h2>
<h2 onmouseover="changeTab(2)">3</h2>
</div>
<div class="tab-content">
<div class="show">content1</div>
<div>content2</div>
<div>content3</div>
</div>

JS:

var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
function changeTab(index) {
for(var i = 0, len = tabs.length; i < len; i++) {
if(i === index) {
tabs[i].className = 'selected';
contents[i].className = 'show';
}else{ tabs[i].className = '';
contents[i].className = ''; }
}
}

这样就只要写一个function了,而且不需要id,但是还是要按照顺序传递参数。

第三种方式和第二种基本一样,只是参数传递的是this指针。

Html:

<div class="tab-head">
<h2 onmouseover="changeTab(this)" class="selected">1</h2>
<h2 onmouseover="changeTab(this)">2</h2>
<h2 onmouseover="changeTab(this)">3</h2>
</div>
<div class="tab-content">
<div class="show">content1</div>
<div>content2</div>
<div>content3</div>
</div>

JS:

var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
function changeTab(tab) {
for(var i = 0, len = tabs.length; i < len; i++) {
if(tabs[i] === tab) {
tabs[i].className = 'selected';
contents[i].className = 'show';
} else {
tabs[i].className = '';
contents[i].className = '';
}
}
}

这种方式稍微方便一些,只要传递this指针,不用按照顺序传递序号,但这也不是最简便的方式。

最简便的一种:

第四种方式:

Html:

<div class="tab-head">
<h2 class="selected">1</h2>
<h2>2</h2>
<h2>3</h2>
</div>
<div class="tab-content">
<div class="show">content1</div>
<div>content2</div>
<div>content3</div>
</div>

JS:

var tabs = document.getElementsByClassName('tab-head')[0].getElementsByTagName('h2'),
contents = document.getElementsByClassName('tab-content')[0].getElementsByTagName('div');
(function changeTab(tab) {
for(var i = 0, len = tabs.length; i < len; i++) {
tabs[i].onmouseover = showTab;
}
})();
function showTab() {
for(var i = 0, len = tabs.length; i < len; i++) {
if(tabs[i] === this) {
tabs[i].className = 'selected';
contents[i].className = 'show';
} else {
tabs[i].className = '';
contents[i].className = '';
}
}
}

这样JS、Html、CSS就完全分离了,通过this指针就可以判断当前鼠标滑过的是哪一个tab了。

以上所述是小编给大家介绍的最简单纯JavaScript实现Tab标签页切换的方式(推荐),希望对大家有所帮助,如果大家有任何疑问请留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 一个图片切换的插件
Oct 09 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
Apr 19 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
EasyUI创建对话框的两种方式
Aug 23 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
10 种最常见的 Javascript 错误(频率最高)
Feb 08 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 #Javascript
javascript insertAfter()定义与用法示例
Jul 25 #Javascript
jquery之别踩白块游戏的简单实现
Jul 25 #Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 #Javascript
JavaScript表单焦点自动切换代码
Jul 24 #Javascript
javascript中sort排序实例详解
Jul 24 #Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 #Javascript
You might like
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JS常用知识点整理
2017/01/21 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
七年级思品教学反思
2016/02/20 职场文书
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫