Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JavaScript 实现 Tab 点击切换

JavaScript 实现 Tab 点击切换

作者头像
Nian糕
修改于 2024-03-19 07:08:38
修改于 2024-03-19 07:08:38
4.3K00
代码可运行
举报
运行总次数:0
代码可运行
Unsplash
Unsplash

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

功能实现

html 部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
div {
  display: none;
  width: 155px;
  height: 100px;
  border: 1px solid #000;
}

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

a. 获取元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

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

b. 给元素绑定点击事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第一个按钮的点击事件
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";        
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第二个按钮的点击事件
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";       
}   
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//第三个按钮的点击事件
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 切换的效果了,来看一下效果

运行结果
运行结果

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

优化

a. 获取元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 所输出的内容

运行结果
运行结果

Let 命令

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

运行结果
运行结果

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

for 循环,var 命令
for 循环,var 命令
for 循环,let 命令
for 循环,let 命令

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

关于 let 更多的特性,或者想要了解 ES 6 新特性的读者,可以去看下阮一峰老师编著的 ECMAScript 6 入门

a. 获取元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 的值

运行结果
运行结果
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.03.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【JavaScript】JavaScript开篇基础(4)
常用的事件: 鼠标事件: onclick(鼠标点击) onmouseover(鼠标经过), onmouseout(鼠标离开), onfocus(获得鼠标焦点), onblur(失去鼠标焦点), onmousemove(鼠标移动触发), onmouseup(鼠标弹起触发), onmousedown(鼠标按下触发) 事件的组成: 事件源:事件触发的对象,如 按钮 事件类型:如何触发,什么事件,如 鼠标点击(onclick) 事件处理程序: 通过一个函数赋值的方式完成
E绵绵
2024/11/05
1150
【JavaScript】JavaScript开篇基础(4)
第27天:js-表单获取焦点和数组声明遍历
1、this指事件的调用者 2、input.value 表单更换内容 3、innerHTML更换盒子里的内容,文字、标签都能换。 4、isNaN("12")如果里面的不是个数字,返回true
半指温柔乐
2018/09/11
4K0
JavaScript 函数
通常来说,一个函数就是一个可以被外部代码调用(或者函数本身递归调用)的"子程序",和程序本身一样,一个函数的函数体是由一系列的语句组成的,函数可以接收传入参数,也可以返回一个值
Nian糕
2018/08/21
7840
JavaScript 函数
【Web APIs】JavaScript 操作多个元素 ① ( 多选一互斥按钮案例 | getElementsByTagName 方法获取 HTMLCollection 伪数组对象 )
实现如下效果 , 页面中有多个按钮 , 点击一个按钮 , 本按钮高亮显示 , 将其它按钮重置 ;
韩曙亮
2024/08/09
1570
【Web APIs】JavaScript 操作多个元素 ① ( 多选一互斥按钮案例 | getElementsByTagName 方法获取 HTMLCollection 伪数组对象 )
JavaScript web编程
三个非常基础的案例,适用于初学者写网页的运用,通过自己的创造和灵感能够写出许多有意思的网页效果,js可以给网页更多的动态效果,使网站更加的灵活。
用户8247415
2021/04/19
3990
排他操作
① 用到新的鼠标事件 鼠标经过 onmouseover 鼠标离开 onmouseout
梨涡浅笑
2020/10/27
1.3K0
排他操作
JavaScript事件与例子
事件,就是预先设置好的一段代码,等到用户触发的时候执行。 一:常见的事件: 1.关于鼠标的事件   onclick 鼠标单击触发   ondblclick 鼠标双击触发   onmouseover 鼠标移上触发   onmouseout 鼠标离开触发   onmousemove 鼠标移动触发 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra
二十三年蝉
2018/02/27
8850
JavaScript案例:tab栏切换
案例分析 Tab栏切换有2个大的模块 上面的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想)修改类名的方式 下面的模块内容,会跟随上面的选项卡变化,所以下面模块变化写到点击事件里面 规律:下面的模块显示内容和上面的选项卡一一对应,相匹配。 核心思路:给上面的tab_list里面的所有小li添加自定义属性,属性值从0开始编号。 当我们点击tab_list里面的某个小li,让tab_con里面对应序号的内容显示,其余隐藏(排他思想) 代码实现 <!DOCTYPE html> <html
岳泽以
2022/10/26
1.9K0
JavaScript案例:tab栏切换
慕课网javascript 进阶篇 第九章 编程练习
把平常撸的码来博客上再撸一遍既可以加深理解,又可以理清思维。还是很纯很纯的小白,各位看官老爷们,不要嫌弃。最近都是晚睡,昨晚也不例外,两点多睡的。故,八点起来的人不是很舒服,脑袋有点晕呼呼,鉴于昨晚看到了这章的编程练习,想着自己DOM编程艺术也差不多看完了,高级3也看了点,所打算开始多敲代码了。 谁知,看着编辑器一脸懵逼,不知道如何啃下这块骨头,米思绪,写着也没什么感觉,索性就不写了,这不下午才来撸它。 要求如下: <!DOCTYPE html> <html> <head> <title>
大当家
2018/06/28
7750
从零开始学 Web 之 DOM(二)对样式的操作,获取元素的方式
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧! 1、对样式的操作 1.1、点击按钮设置 div 的宽高和背景颜色 <body> <input type="button" value="显示颜色" id="btn"> <div id="dv"></div> <scri
Daotin
2018/08/31
2.1K0
JavaScript基础
一 JavaScript的基础 1.1 JS的引入方式 1 直接编写 <script> alert('hello yuan') </script> 2 导入文件 <script src="hello.js"></script> 1.2 JS的变量、常量和标识符 1.2.1 JS的变量 1 2 3 x=5 y=6 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 5)。通过上面的表达式 z=x+y,我们能够计算出 z
用户1214487
2018/01/24
2.1K0
JavaScript基础
100行前端代码实现九宫格抽奖功能
话不多说,直接上效果: 主要流程为: 1. 根据效果图,构建静态页面 2. 获取元素(自带的属性) 3. 绑定事件 4. 事件触发之后 4.1 所有的li元素 在指定的时间间隔下 颜色随机变化 4.2 延时器 2秒后 清除定时器 4.3 在清除定时器之后,所有的li背景色复位,随机选一个 代码实现过程如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compa
APICloud官方
2022/02/18
1.2K0
JS-DOM 综合练习-动态添加删除班级成绩表
费了2个小时,才把原理弄懂,把问题逐个解决,当你发现你最后栽的那个点,是一个小石头拌的你,你起来是该哭还是该笑呢?只怪自己习武不精吧。 虽然问题都解决了,但是还有一个余留的问题就是鼠标经过input时,怎么修改背景颜色的问题。 这一节有点乱,虽然整理的代码编了问题序号。可我相信,再过几天自己回头看肯定还是一头雾水。 so,附上具体问题网址:http://www.imooc.com/code/1636 以下是html整件 <!DOCTYPE html> <html> <head> <meta chars
xing.org1^
2018/05/17
3.8K0
JavaScript 基础
JavaScript 是一种轻量级,解释型的,有着函数优先 (First-class Function) 的编程语言,虽然它是作为开发 WEB 页面的脚本语言而出名的,但是在很多非浏览器环境中也使用 JavaScript,例如 node.js 和 Apache CouchDB,JS 是一种基于原型、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如:函数式编程)编程风格
Nian糕
2018/08/21
1.3K0
JavaScript 基础
如何用原生 javascript 写一个选项卡?
当时学习jquery的时候,是以写一个 选项卡 为开始的。当然,用jq写是非常简单的。
FungLeo
2022/11/28
4690
【javaScript案例】之抽奖器效果的实现
其实很简单,首先用html和css做出整体的框架,然后用js在中间按钮的onclick函数中设置定时器+随机改变某一盒子的背景颜色就可以了。 下面我们来讨论一下细节的方面:
xinxin-l
2022/03/29
1.5K0
【javaScript案例】之抽奖器效果的实现
前端成神之路-WebAPIs02
自定义属性目的:是为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。
海仔
2020/12/22
7630
前端成神之路-WebAPIs02
Javascript DOM(一)
预解析:js 引擎会把 js 里面所有的 var 和 function 提升到当前作用域的最前面
赤蓝紫
2023/01/01
1.2K0
Javascript DOM(一)
前端基础-节点操作
document.createElement() 用来生成网页元素节点,参数为元素的标签名;
cwl_java
2020/03/26
4.3K0
JS-事件之鼠标、键盘都能控制的下拉选框效果
<script type="text/javascript"> window.onload=function(e){ var box=document.getElementById('divselect'), title=box.getElementsByTagName('cite')[0], menu=box.getElementsByTagName('ul')[0], as=box.getElementsByTagName('a'),//as是一个
xing.org1^
2018/05/17
3.3K0
相关推荐
【JavaScript】JavaScript开篇基础(4)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验