最简单纯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 相关文章推荐
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
javascript之学会吝啬 精简代码
Apr 25 Javascript
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
基于vue组件实现猜数字游戏
May 28 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 Javascript
webpack4之SplitChunksPlugin使用指南
Jun 12 Javascript
vue如何进行动画的封装
Sep 26 Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
js判断浏览器的比较全的代码
2007/02/13 Javascript
语义化 H1 标签
2008/01/14 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
python3生成随机数实例
2014/10/20 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
标准离婚协议书(2014版)
2014/10/05 职场文书
离婚协议书范文2014
2014/10/16 职场文书
单位婚育证明范本
2014/11/21 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技