最简单纯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 相关文章推荐
动态控制Table的js代码
Mar 07 Javascript
js表格分页实现代码
Sep 18 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
Nov 19 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 Javascript
JavaScript 异步时序问题
Nov 20 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
为PHP5.4开启Zend OPCode缓存
2014/12/26 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
学习党章思想汇报
2014/01/07 职场文书
创意活动策划书
2014/01/15 职场文书
火锅店营销方案
2014/02/26 职场文书
2014年招生工作总结
2014/11/26 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
python字符串常规操作大全
2021/05/02 Python
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技