最简单纯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 相关文章推荐
javascript 表单验证常见正则
Sep 28 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
May 22 Javascript
jquery组件使用中遇到的问题整理及解决
Feb 21 Javascript
详解JavaScript中shift()方法的使用
Jun 09 Javascript
JavaScript Split()方法
Dec 18 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
JavaScript中Math对象的方法介绍
Jan 05 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 Javascript
JavaScript链式调用实例浅析
Dec 19 Javascript
angular2 NgModel模块的具体使用方法
Apr 10 Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php无序树实现方法
2015/07/28 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
js+xml生成级联下拉框代码
2012/07/24 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
小程序实现发表评论功能
2018/07/06 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
关于python多重赋值的小问题
2019/04/17 Python
python对象与json相互转换的方法
2019/05/07 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
小班开学寄语
2014/04/04 职场文书
环保倡议书范文
2014/05/12 职场文书
医德医风自我评价2015
2015/03/03 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
Python如何加载模型并查看网络
2022/07/15 Python