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 相关文章推荐
JavaScript中SQL语句的应用实现
May 04 Javascript
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
JQuery中attr方法和removeAttr方法用法实例
May 18 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
Layui表格监听行单双击事件讲解
Nov 14 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
PHP程序员编程注意事项
2008/04/10 PHP
php cli换行示例
2014/04/22 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
初识JQuery 实例一(first)
2011/03/16 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
pytorch打印网络结构的实例
2019/08/19 Python
基于python3实现倒叙字符串
2020/02/18 Python
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
品管员岗位职责
2013/11/10 职场文书
预备党员转正思想汇报
2014/01/12 职场文书
管理专员自荐信
2014/01/26 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
php将xml转化对象的实例详解
2021/11/17 PHP
python_tkinter弹出对话框创建
2022/03/20 Python