JavaScript 实现 Tab 点击切换实例代码


Posted in Javascript onMarch 25, 2017

Tab 选项卡切换效果在现如今的网页中,运用的也是比较多的,包括点击切换、滑动切换、延迟切换、自动切换等多种效果,在这篇博文里,我们是通过原生 JavaScript 来实现 Tab 点击切换的效果

1. 功能实现

html 部分

<button style="background-color:#f60; color: #fff;">按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<div style="display:block;">第一个Nian糕</div>
<div>第二个Nian糕</div>
<div>第三个Nian糕</div>

css 部分

div {
 display: none;
 width: 155px;
 height: 100px;
 border: 1px solid #000;
}

接下来是 JS 部分,根据每一步要实现的功能,进而转换成代码,每当我们要实现一个效果的时候,先不要急着去敲代码,而是先思考要怎么去实现,结构是什么样的,某个功能需要用到什么事件等等,自己在脑海里把整个流程过一遍,再去把每一步的逻辑转换成代码

a. 获取元素

var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

注释: document.getElementsByTagName 返回的是一个[类数组对象],可以使用数组的方法对其进行处理,但类数组对象并不具有数组所具有的方法

b. 给元素绑定点击事件

//第一个按钮的点击事件
btnList[0].onclick = function () {
 btnList[0].style.color = "#fff";
 btnList[0].style.backgroundColor = "#f60";
 btnList[1].style.color = "";
 btnList[1].style.backgroundColor = "";
 btnList[2].style.color = "";
 btnList[2].style.backgroundColor = "";
 divList[0].style.display = "block";    
 divList[1].style.display = "none";    
 divList[2].style.display = "none";    
}
//第二个按钮的点击事件
btnList[1].onclick = function () {
 btnList[0].style.color = "";
 btnList[0].style.backgroundColor = "";
 btnList[1].style.color = "#fff";
 btnList[1].style.backgroundColor = "#f60";
 btnList[2].style.color = "";
 btnList[2].style.backgroundColor = "";  
 divList[0].style.display = "none";    
 divList[1].style.display = "block";    
}
//第三个按钮的点击事件
btnList[2].onclick = function () {
 btnList[0].style.color = "";
 btnList[0].style.backgroundColor = "";
 btnList[1].style.color = "";
 btnList[1].style.backgroundColor = "";
 btnList[2].style.color = "#fff";
 btnList[2].style.backgroundColor = "#f60";
 divList[0].style.display = "none";    
 divList[1].style.display = "none";    
 divList[2].style.display = "block";  
}

现在我们已经实现了一个 Tab 切换的效果了,来看一下效果

JavaScript 实现 Tab 点击切换实例代码

虽然很简陋,但已经达到我们想要的效果了,读者可根据自己想要的样式来设置 CSS,接下来我们要做的就是,对 JS 代码进行优化

2. 优化

a. 获取元素

var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

b. 给每一个 button 元素绑定点击事件

for(var i = 0; i < btnList.length; i++ ) {
 btnList[i].index = i; //给每个按钮添加index属性,标记是第几个按钮
 btnList[i].onclick = function() {
  for(var j = 0; j < btnList.length; j++) {
   //将所有的按钮样式去掉,块隐藏
   btnList[j].style.color = "";
   btnList[j].style.backgroundColor = "";
   divList[j].style.display = "none";
  }
  //给点击的按钮添加样式,对应的块显示
  this.style.color = "#fff";
  this.style.backgroundColor = "#f60";
  divList[this.index].style.display = "block";
 }
}

index 返回字符位置,它是被搜索字符串中第一个成功匹配的开始位置,从零开始

this 是 Javascript 的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用 this,关于 this 的值,会跟随函数使用场景的不同而发生变化,但是我们只需要记住一个原则就可以了,this 指的是调用函数的那个对象

在这里 this 指向对应的点击按钮,我们可以通过控制台打印来看到 this 所输出的内容

JavaScript 实现 Tab 点击切换实例代码

3. Let 命令

ES 6 中新增了 let 命令,用来声明变量,其用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效

JavaScript 实现 Tab 点击切换实例代码

在上面的代码中,我们在代码块里,分别用 var let 声明了两个变量,接着在代码块内外打印这两个变量,可以看到,var 声明的变量返回了正确的值,代码块内打印 let 声明的变量返回了正确的值,而在代码块外打印 let 声明的变量报错,这表明,let 声明的变量只在它所在的代码块有效

JavaScript 实现 Tab 点击切换实例代码

JavaScript 实现 Tab 点击切换实例代码

上面代码中,变量 i var 声明的,在全局范围内都有效,所以全局只有一个变量 i,每一次循环,变量 i 的值都会发生改变,而循环内被赋给数组 a function 在运行时,会通过闭包读到这同一个变量 i,导致最后输出的是最后一轮的 i 的值,也就是 10,而如果使用 let,声明的变量仅在块级作用域内有效,最后输出的是 6

a. 获取元素

var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

b. 给每一个 button 元素绑定点击事件

for(let i = 0; i < btnLists.length; i++) {
 btnLists[i].onclick = function() {
  for(var j = 0;j < btnLists.length;j++){
   btnLists[j].style.color="";
   btnLists[j].style.backgroundColor="";
   divLists[j].style.display="none";
  }
  this.style.color = "yellow";
  this.style.backgroundColor="#f60";
  divLists[i].style.display="block";
 }
}

同样的,我们也是控制台来打印一下 i 的值

JavaScript 实现 Tab 点击切换实例代码

End of File

行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
Jquery显示、隐藏元素以及添加删除样式
Aug 09 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
js同源策略详解
May 21 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
Jul 21 Javascript
微信小程序实现form表单本地储存数据
Jun 27 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 Javascript
Javascript Symbol原理及使用方法解析
Oct 22 Javascript
ES6中的Javascript解构的实现
Oct 30 Javascript
微信小程序实现底部弹出框
Nov 18 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 #Javascript
javascript实现的图片预览功能
Mar 25 #Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 #Javascript
bootstrap table动态加载数据示例代码
Mar 25 #Javascript
JS控件bootstrap datepicker使用方法详解
Mar 25 #Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 #Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
Mar 25 #Javascript
You might like
关于PHP通用返回值设置方法
2017/03/31 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
python mysql中in参数化说明
2020/06/05 Python
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
岗位廉政承诺书
2014/03/27 职场文书
三万活动总结
2014/04/28 职场文书
质量整改报告范文
2014/11/08 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
Python机器学习之基础概述
2021/05/19 Python
Python pyecharts绘制条形图详解
2022/04/02 Python