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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ApacheWeb 配置多站点具体方法
Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d。默认情况下,站点的数据位于 /var/www 中。对于多个站点,你需要提供多个位置,每个位置对应托管的站点。
会长君
2023/04/26
8810
Apache Web 服务器配置多个站点
正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d。默认情况下,站点的数据位于 /var/www 中。对于多个站点,你需要提供多个位置,每个位置对应托管的站点。
用户8989785
2021/09/10
3.5K0
如何使用 Apache Web 服务器配置多个站点
正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d。默认情况下,站点的数据位于 /var/www 中。对于多个站点,你需要提供多个位置,每个位置对应托管的站点。
用户8989785
2021/09/09
2.5K0
CentOS 7中安装配置 Apache Web 服务器
学习如何在CentOS 7 中的 Apache 上托管你自己的网站,这是一个可靠、流行且易于配置的 Web 服务器。
星哥玩云
2022/07/13
2K0
CentOS6下使用Apache部署HTTP服务
Apache--目前用于实现http服务的软件有许多,包括主流的Apache、Nginx,还有微软的IIS等,这篇文章只介绍Apache实现的各种功能的http服务,通过Apache的功能说明配置文件中每个指令的具体含义和用法。
星哥玩云
2022/07/13
1.4K0
CentOS6下使用Apache部署HTTP服务
Apache 配置多个HTTPS站点
作中经常会遇到多个站点实现https访问,并指向同一个网页,本文将详解如何在CentOS 环境下配置Apache多站点实现HTTPS访问。
星哥玩云
2022/07/27
1.5K0
Apache 配置多个HTTPS站点
Linux下配置基于Apache的Web虚拟主机
Web虚拟主机指的是在同一台服务器中运行多个web站点,其中的每个站点实际上并不独立占用整个服务器,因此被称为“虚拟”Web主机,通过虚拟Web主机服务可以充分利用服务器的硬件资源。
星哥玩云
2022/07/27
1.8K0
Linux下配置基于Apache的Web虚拟主机
Apache配置与应用
4、修改自动生成的awstats访问权限,加载CGI模块(Apache2.4以上版本需要加载CGI模块)
全栈程序员站长
2022/09/06
5400
Apache配置与应用
Apache配置详解(最好的APACHE配置教程)
Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。
全栈程序员站长
2022/09/14
8.3K0
IIS、apache、tomcat服务器虚拟主机配置
首先我们有一个域名  xxx.com;(注,两个一级域名不相同也可以) 有两个二级域名   priject.xxx.com 和 movie.xxx.com 有一台主机 ,现在假设访问主机电脑 IIS服务器虚拟主机配置方法 1、在IIS中添加网站 其中  绑定一栏中的主机名为 priject.xxx.com,在分配好网站的文件路径 2、添加isapi筛选器 其中可执行文件位置为php的安装位置 3、处理程序映射->添加脚本映射 4、最后重启IIS服务器,就可以用域名访问了 再添加站点,同样的步骤。 tomcat服务器虚拟主机配置方法 在Engine节点下增加host节点 <Host name="priject.xxx.com"  appBase="webapps/priject"             unpackWARs="true" autoDeploy="true">         <!-- SingleSignOn valve, share authentication between web applications              Documentation at: /docs/config/valve.html -->         <!--         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />         -->         <!-- Access log processes all example.              Documentation at: /docs/config/valve.html              Note: The pattern used is equivalent to using pattern="common" -->         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                prefix="localhost_access_log." suffix=".txt"                pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> <Host name= "movie.xxx.com"  appBase="webapps/movie"             unpackWARs="true" autoDeploy="true">         <!-- SingleSignOn valve, share authentication between web applications              Documentation at: /docs/config/valve.html -->         <!--         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />         -->         <!-- Access log processes all example.              Documentation at: /docs/config/valve.html              Note: The pattern used is equivalent to using pattern="common" -->         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                prefix="localhost_access_log." suffix=".txt"                pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> 注在webapps目录下的movie要创建ROOT目录才可以,而且ROOT必须大写。在ROOT目录先放置jsp代码。 tomcat会根据主机名称自动寻找相应的目录去访问 apache服务器虚拟主机配置方法 打开httpd.conf文件 去掉LoadModule vhost_alias_module modules/mod_vhost_alias.so 这句前面的#号 和 Include conf/extra/httpd-vhosts.conf这句前面的#号 Include conf/e
张泽旭
2018/12/10
2.8K0
手把手教你,嘴对嘴传达----Apache虚拟主机配置与应用
在同一台服务器中运行多个web站点,其中每一个站点并不独立占用一台真正的计算机 通过虚拟web主机可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本 使用httpd可以非常方便的构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的web站点
不吃小白菜
2020/09/03
5120
手把手教你,嘴对嘴传达----Apache虚拟主机配置与应用
ubuntu apache2配置详解(含虚拟主机配置方法)[通俗易懂]
在Windows下,Apache的配置文件通常只有一个,就是httpd.conf。但我在Ubuntu Linux上用apt-get install apache2命令安装了Apache2后,竟然发现它的httpd.conf(位于/etc/apache2目录)是空的!进而发现Ubuntu的 Apache软件包的配置文件并不像Windows的那样简单,它把各个设置项分在了不同的配置文件中,看起来复杂,但仔细想想设计得确实很合理。
全栈程序员站长
2022/09/07
4.6K0
【经验分享】Centos7下虚拟机配置WEB服务器,Apache服务器的安装和配置,独立Apache服务器的安装和配置个人网站和虚拟主机的搭建,Apache服务器的运行测试
第五步:查找 DirectoryIndex ,将其值设置为自己站点首页文件的文件名。这里假设为:index.html
命运之光
2024/06/01
8550
【经验分享】Centos7下虚拟机配置WEB服务器,Apache服务器的安装和配置,独立Apache服务器的安装和配置个人网站和虚拟主机的搭建,Apache服务器的运行测试
Apache 使用ssl模块配置HTTPS
Web服务器在默认情况下使用HTTP,这是一个纯文本的协议。正如其名称所暗示的,纯文本协议不会对传输中的数据进行任何形式的加密。而基于HTTP的Web服务器是非常容易配置,它在安全方面有重大缺陷。任何”中间人”,通过精心防止的数据包嗅探器,是能够看到任何经过的数据包内容。更进一步,恶意用户甚至可以在传输路径设置一个假冒的WEB服务器冒名顶替实际的目标Web服务器。在这种情况下,最终用户可能实际上与假冒者服务器,而不是真正的目的服务器进行通信。这样,恶意用户可以通过精心设计的表单欺骗终端用户获取到敏感信息,如用户名密码。
阳光岛主
2019/02/18
6.1K0
Apache 使用ssl模块配置HTTPS
PHP-服务器配置
要更改虚拟目录的位置,需要到apache的配置文件中更改(conf/httpd.conf)
cwl_java
2020/03/25
2.1K0
5分钟学会在CentOS 8上安装Apache
Apache HTTP服务器是世界上使用最广泛的Web服务器。 它是一个免费的,开源的,跨平台的HTTP服务器,具有强大的功能,并且可以通过多种模块进行扩展。
星哥玩云
2022/08/08
3.2K0
5分钟学会在CentOS 8上安装Apache
apache虚拟主机配置文件_apache是一种什么服务器
记事本打开httpd.conf文件 ,该文件在apache的目录下,如: D:\AppServ\Apache2.2\conf,修改如下两处:
全栈程序员站长
2022/11/07
9480
CentOS-Apache及多站点VirtualHost配置
Apache主要的配置文件是/etc/httpd/conf/httpd.conf,文件中包含许多在基本安装中不需要更改的配置。实际上只需要对文件稍微进行一些更改即可启动并运行服务。
偏有宸机
2020/11/05
2.8K0
Linux实验10 Apache服务器配置
Apache服务器,全称为Apache HTTP Server,是由Apache软件基金会开发和维护的一款开源网页服务器软件。它是世界上最流行的Web服务器软件之一,能够在多种计算机操作系统上运行,包括Unix、Linux、Windows等。Apache服务器以其稳定性、安全性和高度可配置性著称,支持多种功能和技术,比如CGI、SSL/TLS安全协议、虚拟主机等。它还能够通过模块化架构轻松扩展功能,允许用户根据需要添加如PHP、Python等动态内容处理模块。Apache服务器因其开源特性,拥有庞大的用户社区和丰富的文档资源,适合从个人网站到大型企业级应用的各种Web服务部署场景。
90后小陈老师
2024/05/17
2640
Linux实验10 Apache服务器配置
apache虚拟主机配置
Apache是一种流行的Web服务器,它允许您在同一物理服务器上运行多个网站。通过配置虚拟主机,可以为每个网站提供独立的Web根目录和配置文件,从而实现多个网站在同一服务器上运行的能力。在本文中,我们将讨论如何在Apache中配置虚拟主机。
玖叁叁
2023/04/10
29K1
推荐阅读
相关推荐
ApacheWeb 配置多站点具体方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验