JavaScript实现Tab标签页切换的最简便方式(4种)


Posted in Javascript onJune 28, 2020

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

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标签页切换的最简便方式(4种)

实现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标签页切换的最简便方式(4种)的文章就介绍到这了,更多相关JavaScript Tab标签页切换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JSON语法五大要素图文介绍
Dec 04 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
记一次用ts+vuecli4重构项目的实现
May 21 Javascript
vuex实现购物车功能
Jun 28 #Javascript
JavaScript图像放大镜效果实现方法详解
Jun 28 #Javascript
详细分析Node.js 模块系统
Jun 28 #Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 #Javascript
js瀑布流布局的实现
Jun 28 #Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 #Javascript
vue实现登录拦截
Jun 29 #Javascript
You might like
德生9700DX电路分析
2021/03/02 无线电
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
php-app开发接口加密详解
2018/04/18 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python代码太长换行的实现
2019/07/05 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
大学新生军训自我鉴定
2014/03/18 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
工作检讨书范文
2015/01/23 职场文书
英语辞职信范文
2015/02/28 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python