【JavaScript】选项卡切换

选项卡切换

选项卡切换是一种常见的网页设计模式,用于在一个页面内显示和切换不同内容区域,而无需加载页面。用户可以通过点击选项卡切换显示不同的内容,而隐藏其他内容。

多选项显示:页面顶部、侧边或其他地方通常有多个选项卡标题,供用户选择。

内容分区切换:每个选项卡对应一个内容区域,点击某个选项卡会显示对应内容,隐藏其他内容。

样式变化:被选中的选项卡会有特殊的样式(如背景颜色、字体加粗等),以区分选中状态和未选中状态。

选项卡切换的组成

标题区域和内容区域

标题区域

通常以按钮或列表形式排列,每个选项卡代表一个内容分区。

内容分区

每个选项卡对应的内容部分,默认只显示当前选中的内容,其他内容隐藏。

选项卡切换工作流程

初始状态:默认显示第一个选项卡及其对应的内容。

用户操作:用户点击选项卡标题,触发切换操作。

响应切换

  1. 改变选项卡样式,突出显示当前选中的选项卡。
  2. 显示对应的内容分区,隐藏其他分区内容。

选项卡的简单实现

实现思路

  1. 点击任意li:
    1. 当前点击的按钮加上“current”样式。
    2. 其他按钮样式清空。
  2. 对应的内容使用div显示,其他内容隐藏。
  3. 隐藏的内容区域被赋予一个随机背景颜色。

实现步骤

1、获取想要获得的html元素

querySelectorAll选择所有.btns下的li元素,以及.content下的div元素。

console.log(li_list)输出按钮列表,方便调试。

var li_list = document.querySelectorAll(".btns li")
var div_list = document.querySelectorAll(".content div")
console.log(li_list)
2、循环绑定index属性
for(var i = 0;i<li_list.length;i++){// 给每个标题按钮绑定index属性li_list[i].setAttribute("index",i)......
}

遍历每个li,设置一个自定义属性index,表示在列表中的索引。

3、绑定点击事件

点击摸个按钮后,将其className设置为“current”,表示选中状态;其他按钮的className清空,即移除样式。

li_list[i].onclick = function(){//样式切换for(var j = 0;j<li_list.length;j++){li_list[j].className=""}this.className = "current"
}
4、内容切换

使用getAttribute方法获取当前点击按钮的index值

遍历所有内容区域,如果索引k和按钮的index一致,显示内容区域;如果不一致,隐藏内容区域。

var num = this.getAttribute("index")
for(var k = 0;k<div_list.length;k++){if(k==num){//元素显示div_list[k].style.display = "block"}else{div_list[k].style.display = "none"}
}

5、为隐藏的内容生成随机背景(选做,加着玩的)

为每个隐藏的内容区域:

使用 Math.random()Math.round() 生成一个6位的随机数,表示十六进制颜色代码。

将这个随机颜色赋值给div_list[k].style.background。

var bg = "";
for (var i = 0; i < 6; i++) {bg = bg + Math.round(Math.random() * 9);
}
div_list[k].style.background = "#" + bg;
6、完整代码

HTML:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8" /><title>table切换</title><script src="table.js" defer></script><style>*{padding:0;margin: 0;}.container{width: 100%;height: 400px;/* background:yellow; */margin: 100px auto;        }.container .btns{display: flex;width: 80%;justify-items: center;margin: auto;}.container .btns li{width: 40%;list-style-type: none;border:1px solid plum;border-bottom: 0px;padding: 5px 7px;margin-right: 4px;cursor:pointer;border-radius: 4px;display: flex;justify-content: center;}.container .btns li.current{background:plum;color:#ffff;display: flex;justify-content: center ;}.container .content{border:2px  solid plum;height: 300px;border-radius: 0px 40px 0px 40px;}.container .content div{height: 100%;/* 隐藏元素 */display: none;color: aliceblue;}.container .content div:nth-child(1){display: block;}</style>
</head>
<body><div class="container"><ul class="btns"><li class="current"><a href="#">首页</a></li><li><a href="#">机构简介</a></li><li><a href="#">招生工作</a></li><li><a href="#">培养工作</a></li><li><a href="#">学位管理</a></li><li><a href="#">学位点建设</a></li><li><a href="#">专业学位</a></li><li><a href="#">导师管理</a></li><li><a href="#">学生工作</a></li><li><a href="#">文件汇编</a></li><li><a href="#">下载专区</a></li></ul><div class="content"><div>内容1</div><div>内容2</div><div>内容3</div><div>内容4</div><div>内容5</div><div>内容6</div><div>内容7</div><div>内容8</div><div>内容9</div><div>内容10</div><div>内容22</div><div>内容33</div></div></div>
</body>
</html>

js:

var li_list = document.querySelectorAll(".btns li")
var div_list = document.querySelectorAll(".content div")
console.log(li_list)for(var i = 0;i<li_list.length;i++){// 给每个标题按钮绑定index属性li_list[i].setAttribute("index",i)li_list[i].onclick = function(){//样式切换for(var j = 0;j<li_list.length;j++){li_list[j].className=""}this.className = "current"// 内容切换var num = this.getAttribute("index")for(var k = 0;k<div_list.length;k++){if(k==num){//元素显示div_list[k].style.display = "block"}else{div_list[k].style.display = "none"var bg = ""for(var i=0;i<6;i++){bg = bg +Math.round(Math.random()*9)}div_list[k].style.background = "#"+bg;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33857.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】Spring 整合 MyBatis

在实际项目开发中&#xff0c;将 Spring 和 MyBatis 进行整合可以提高开发效率、简化配置、增强事务管理和可维护性&#xff0c;同时利用 Spring 的强大功能能提升系统的稳定性。这里从独立使用 MyBatis 开始&#xff0c;逐步实现与 Spring 框架的整合。 MyBatis 独立开发 现…

JavaWeb学习(1)(同步或异步请求、依赖jQuery简单实现Ajax技术)

目录 一、Web的基本流程与页面局部刷新。 &#xff08;1&#xff09;web开发时基本流程。 &#xff08;2&#xff09;页面的"全局刷新"与"局部刷新"。 二、Ajax技术。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;基本特点。 1、与服务…

win11 vs2022 python3.9环境下运行jupyterlab

jupyter官网及简介&#xff1a;https://jupyter.org/ Jupyter 集合“浏览器 编程 文档 绘图 多媒体 发布”众多功能与一身&#xff0c;适合探究式学习。 JupyterLab是最新的基于网络的笔记本、代码和数据的互动开发环境。 Jupyter Notebook是JupyterLab的上一代版本。 由…

STM32 进阶 定时器 2基本定时器 基本定时器中断案例:LED闪烁

基本定时器 基本定时器TIM6和TIM7各包含一个16位自动装载计数器&#xff0c;由各自的可编程预分频器驱动。 这2个定时器是互相独立的&#xff0c;不共享任何资源。 这个2个基本定时器只能向上计数&#xff0c;由于没有外部IO&#xff0c;所以只能计时&#xff0c;不能对外部…

libaom 源码分析:帧间帧内预测编码

整体流程框架逻辑 帧间帧内预测模式的分区类型 不论是 RD 模式还是 nonRD 模式,libaom 中分区只应用 PARTITION_NONE、PARTITION_HORZ、PARTITION_VERT、PARTITION_SPLIT 四种类型,不像 AV1 标准中介绍的那样有十种类型(其实 libaom 源码中也实现了所有了类型,但在正式版中…

达梦归档文件名与实例对应关系

默认的&#xff0c;达梦归档文件名比较难以看懂&#xff0c;且多实例下不好区分 靠它就行 select upper(to_char((select DB_MAGIC), xxxxxxxxxx)) mag_id; 这样就对上号了。

JavaScript实现圆周运动效果

在 JavaScript 中&#xff0c;可以通过 requestAnimationFrame 和数学公式来实现圆周运动效果。以下是示例代码&#xff1a; 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewp…

11.爬虫

前言&#xff1a; 正则表达式的作用&#xff1a; 作用一&#xff1a;校验字符串是否满足规则 作用二&#xff1a;在一段文本中查找满足要求的内容 一.Pattern类和Matcher类&#xff1a; 1.Pattern类&#xff1a;表示正则表达式 a.因此获取Pattern对象就相当于获取正则表达式…

Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速&#xff0c;租房市场日益繁荣&a…

Linux里面实时查看项目的tomcat服务器日志文件

目录 前言 一、查看tomcat服务器日志 二、运行项目验证&#xff08;篇外&#xff09; (一)运行自己的项目 二、发送验证码测试 前言 这个可以查看在Linux系统里面部署运行项目的日志&#xff0c;日志内可以查看到运行和各种错误以及前后端交互传输的各种数据&#xff0c;…

12,攻防世界simple_php

simple_php 题目来源:Cyberpeace-n3k0 题目描述: 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 进入靶场 这段PHP代码是一个简单的web应用示例&#xff0c;让我们逐步分析这段代码&#xff1a; show_source(__FILE__);&#xff1a;这行代码会显示当前文件的…

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中&#xff0c;优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标&#xff0c;Tree Shaking 就是其中一种非常重要的优化技术&#xff0c;它通过在编译阶段移除未被使用的代码模块&#xff0c;从而显著减小最终…

5G CPE核心器件-基带处理器(三)

5G CPE 核心器件 -5G基带芯片 基带芯片简介基带芯片组成与结构技术特点与发展趋势5G基带芯片是5G CPE中最核心的组件,负责接入5G网络,并进行上下行数据业务传输。移动通信从1G发展到5G,终端形态产生了极大的变化,在集成度、功耗、性能等方面都取得巨大的提升。 基带芯片简…

SpringBoot高级-底层原理

目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-Configuration配置注解 04-SpringBoot2高级-底层原理-Import注解使用1 05-SpringBoot2高级-底层原理-Import注解使用2 06-S…

ES常见问题汇总

ES常见问题汇总 1.Es的作用&#xff08;elasticsearch&#xff09; 作用&#xff1a; elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 ELK技术栈 elasticsearch结合kibana、Logstash&…

linux环境宝塔服务部署安装及介绍

一、简介 宝塔面板是一款服务器管理软件&#xff0c;支持windows和linux系统&#xff0c;可以通过Web端轻松管理服务器&#xff0c;提升运维效率。例如&#xff1a;创建管理网站、FTP、数据库&#xff0c;拥有可视化文件管理器&#xff0c;可视化软件管理器&#xff0c;可视化C…

ONES 功能上新|ONES Project 甘特图再度升级

ONES Project 甘特图支持展示工作项标题、进度百分比、依赖关系延迟时间等信息。 应用场景&#xff1a; 在使用甘特图规划项目任务、编排项目计划时&#xff0c;可以对甘特图区域进行配置&#xff0c;展示工作项的工作项标题、进度百分比以及依赖关系延迟时间等维度&#xff0c…

跨域请求限制的通俗解释

什么是跨域 想象一下&#xff0c;每个网站就像一个独立的小国家&#xff0c;有自己的边界&#xff08;域名&#xff09;。比如&#xff0c;https://example1.com是一个国家&#xff0c;https://example2.com是另一个国家。浏览器就像是这些国家之间的海关&#xff0c;它会检查从…

javascript删除对象属性

1、操作符 delete object.property const obj {age: 19,name: hanmeimei, } delete obj.age2、Reflect.deleteProperty(object, propertyKey) 还会返回布尔值 const obj {age: 19,name: hanmeimei, } Reflect.deleteProperty(obj, name)

Linux 查看系统资源常用命令

目录 Linux 查看系统资源常用命令 一、top 二、htop 三、vmstat 四、iostat 五、mpstat 六、free 七、sar 八、ps 九、pstree 十、lsof 十一、uptime 十二、dmesg 十三、dmidecode 十四、lsblk 十五、blkid 十六、fdisk -l 十七、parted -l 十八、df -h 十…