如何用原生JS写Tab切换
1. 基本思路
① 遍历Tab选项
② 然后给每个Tab选项绑定点击事件
③ 每次点击时清除所有Tab选项及Tab选项内容的样式,然后给当前Tab选项添加标记样式,给当前Tab选项添加显示样式
2. 具体代码实现
<!--HTML--> <div id="tab"> <!--Tab选项--> <div class="tab-nav"> <a href="javascript:;" class="cur">选项1</a> <a href="javascript:;">选项2</a> <a href="javascript:;">选项3</a> </div> <!--Tab选项内容--> <div class="tab-content"> <div class="content content1 cur">选项内容1</div> <div class="content content2">选项内容2</div> <div class="content content3">选项内容3</div> </div> </div>
/*CSS*/ #tab{ width: 300px; margin: 30px auto;} .tab-nav{ display: flex;} .tab-nav a{ flex: 1; line-height: 40px; border: 1px solid #000; text-align: center; text-decoration: none; color: #000;} .tab-nav a.cur{ color: #fff; background: #000;} .content{ display: none; width: 100%; height: 300px; color: #fff; box-sizing: border-box; padding: 10px;} .content.cur{ display: block;} .content1{ background: #f00; } .content2{ background: #0f0;} .content3{ background: #00f;}
//Javascript window.onload = function () { var oTab = document.getElementById('tab'); var aTabNav = oTab.querySelectorAll('.tab-nav a'); var aTabContent = oTab.querySelectorAll('.tab-content .content'); for(var i = 0; i < aTabNav.length; i++){ // 遍历Tab选项 aTabNav[i].onclick = (function (i) { // Tab选项绑定点击事件 return function () { // 清除所有Tab选项的标记样式 for(var j = 0; j < aTabNav.length; j++){ aTabNav[j].classList.remove('cur'); } aTabNav[i].classList.add('cur'); // 清除所有Tab选项内容的显示样式 for(j = 0; j < aTabContent.length; j++){ aTabContent[j].classList.remove('cur'); } aTabContent[i].classList.add('cur'); } })(i); } };
以上JS还可以继续优化,将相同功能的代码封装成函数:
window.onload = function () { var oTab = document.getElementById('tab'); var aTabNav = oTab.querySelectorAll('.tab-nav a'); var aTabContent = oTab.querySelectorAll('.tab-content .content'); for(var i = 0; i < aTabNav.length; i++){ aTabNav[i].onclick = (function (i) { return function () { addCurClass(aTabNav,i); addCurClass(aTabContent,i); } })(i); } }; function addCurClass(obj,index) { for(var i = 0; i < obj.length; i++){ obj[i].classList.remove('cur'); } obj[index].classList.add('cur'); }
代码没有什么难度,非常基础,但是需要注意的一点是,在获取当前点击项的索引时,我们需要使用到闭包。
相关推荐
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java 数组 之 一维数组 追加 元素
http://www.verejava.com/?id=16992650730025 /** 数组分类 1. 一维数组 1.1 一维数组的定义和初始化 1.2 对一维数组的操作, 遍历,添加,插入,修改,删除,排序,查找 2. 二维数组 2.1 二维数组的定义和初始化 2.2 二维数组的遍历 */ public class ArrayAppend { public static void main(String[] args) { //一维数组的定义和初始化 //静态定义一维数组 int[] scores = { 90, 70, 50, 80, 60, 85 }; //向一维数组scores末尾中添加一个学生的成绩 75. /* 思路: 1. 先创建一个比原来scores数组长度大1的临时数组 tempArray 2. 将scores数组的每一个值复制到 tempArray 3. 然后将 成绩为 75 赋值到 tempArray的新增最后的索引位置 4. 最后将tempArray地址指针引用赋值给 scores; */ int[] tempArray = new int[scores....
- 下一篇
Java类加载机制,这篇大概、也许、可能就够了
写在前面 关于Java类加载机制一至有没办法说的痛苦。因为当初我在学习这方面的内容时,多多少少有一些懵逼,所以这次的文章,将尽可能的把概念性的东西转化成容易理解的内容,所以希望各位看到文章的童鞋可以有所收获~ 正文开始 第一步,先让咱们看一段代码: public class Main { static{ System.out.println("我是静态代码块"); } { System.out.println("我是实例代码块"); } public static void main(String[] args) { Main main1=new Main(); Main main2=new Main(); } } 各位小伙伴,这段代码run起来之后会是什么样的结构?这里就不卖关子了,直接贴结果。 image OK,如果小伙伴们,知道这个结果,并且也理解这个结果,那么接下来的内容就可以跳过啦。如果有疑问的话,那就让我们带着这个答案,往下看,内容很少,。重在理解~ Java类加载机制 先看一下概念 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8编译安装MySQL8.0.19