js实现tab栏切换

目录

1、排他思想实现

2、事件委托实现


1、排他思想实现

思路:

        需要点击谁,就先获取谁,获得的是一个伪数组

        遍历数组,并给数组里的每个元素添加点击事件,写一个active类用于显示边框样式

        每一个元素对应一张图片,先将所有图片隐藏,并写一个active类用于显示对应图片

        点击时,先清除active类,点击谁,谁就添加active类,对应的图片显示,其他隐藏

        在那之前要先清除active类,那个需要显示就添加active类

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>tab栏切换</title><style>* {margin: 0;padding: 0;}.tab {width: 590px;height: 340px;margin: 20px;border: 1px solid #e4e4e4;}.tab-nav {width: 100%;height: 60px;line-height: 60px;display: flex;justify-content: space-between;}.tab-nav h3 {font-size: 24px;font-weight: normal;margin-left: 20px;}.tab-nav ul {list-style: none;display: flex;justify-content: flex-end;}.tab-nav ul li {margin: 0 20px;font-size: 14px;}.tab-nav ul li a {text-decoration: none;border-bottom: 2px solid transparent;color: #333;}.tab-nav ul li a.active {border-color: #e1251b;color: #e1251b;}.tab-content {padding: 0 16px;}.tab-content .item {display: none;}.tab-content .item.active {display: block;}</style></head><body><div class="tab"><div class="tab-nav"><h3>每日特价</h3><ul><li><a class="active" href="javascript:;">精选</a></li><li><a href="javascript:;">美食</a></li><li><a href="javascript:;">百货</a></li><li><a href="javascript:;">个护</a></li><li><a href="javascript:;">预告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="./images/tab00.png" alt="" /></div><div class="item"><img src="./images/tab01.png" alt="" /></div><div class="item"><img src="./images/tab02.png" alt="" /></div><div class="item"><img src="./images/tab03.png" alt="" /></div><div class="item"><img src="./images/tab04.png" alt="" /></div></div></div><script>// 需求 点击tab栏进行对应内容切换// 1 获取相关元素const lis = document.querySelectorAll('.tab-nav li')const divs = document.querySelectorAll('.tab-content  div')// 2 循环绑定事件for (let i = 0; i < lis.length; i++) {lis[i].addEventListener('mouseenter', function () {// 2-1 让点击的菜单加active 其他移除document.querySelector('.tab-nav a.active').classList.remove('active')this.querySelector('a').classList.add('active')// 2-2 对应的内容显示 其他内容隐藏document.querySelector('.tab-content div.active').classList.remove('active')divs[i].classList.add('active')})}</script></body>
</html>

2、事件委托实现

思路:

        由于要添加点击事件的元素有很多,这样需要给每个元素都添加点击事件,比较麻烦。

        我们可以利用事件委托来实现,就是给他们共同的祖先元素绑定事件,其子元素触发的事件就会冒泡到祖先元素,可以提高代码的执行效率,对于其对应内容的显示,在其添加active类时,给每张图片所在的块添加data-id 的属性,在添加类时用e.target.dataset.id作为索引值来添加。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>tab栏切换</title><style>* {margin: 0;padding: 0;}.tab {width: 590px;height: 340px;margin: 20px;border: 1px solid #e4e4e4;}.tab-nav {width: 100%;height: 60px;line-height: 60px;display: flex;justify-content: space-between;}.tab-nav h3 {font-size: 24px;font-weight: normal;margin-left: 20px;}.tab-nav ul {list-style: none;display: flex;justify-content: flex-end;}.tab-nav ul li {margin: 0 20px;font-size: 14px;}.tab-nav ul li a {text-decoration: none;border-bottom: 2px solid transparent;color: #333;}.tab-nav ul li a.active {border-color: #e1251b;color: #e1251b;}.tab-content {padding: 0 16px;}.tab-content .item {display: none;}.tab-content .item.active {display: block;}</style></head><body><div class="tab"><div class="tab-nav"><h3>每日特价</h3><ul><li><a class="active" href="javascript:;" data-id="0">精选</a></li><li><a href="javascript:;" data-id="1">美食</a></li><li><a href="javascript:;" data-id="2">百货</a></li><li><a href="javascript:;" data-id="3">个护</a></li><li><a href="javascript:;" data-id="4">预告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="./images/tab00.png" alt="" /></div><div class="item"><img src="./images/tab01.png" alt="" /></div><div class="item"><img src="./images/tab02.png" alt="" /></div><div class="item"><img src="./images/tab03.png" alt="" /></div><div class="item"><img src="./images/tab04.png" alt="" /></div></div></div><script>// 需求 点击tab栏进行对应内容切换// 1 获取相关元素const tab_nav = document.querySelector('.tab-nav')const divs = document.querySelectorAll('.tab-content  div')// 2 绑定事件tab_nav.addEventListener('click', function (e) {if (e.target.tagName === 'A') {// 2-1 让点击的菜单加active 其他移除document.querySelector('.tab-nav a.active').classList.remove('active')//  console.log(this) // this 永远绑定的事件源 e.target -> 真正触发的元素e.target.classList.add('active')// 2-2 对应的内容显示 其他内容隐藏document.querySelector('.tab-content div.active').classList.remove('active')divs[e.target.dataset.id].classList.add('active')}})</script></body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连新手小白都知道的电子画册一键生成器,你还不知道吗?

相信大家平时见得比较多的是纸质画册&#xff0c;而对于电子画册大家又了解多少呢&#xff1f;电子画册近年来倍受众多企业青睐&#xff0c;制作一本好的电子画册能够让企业在市场竞争中脱颖而出&#xff0c;给人以深刻印象。如何制作呢&#xff1f; 其实很简单&#xff0c;关…

电脑集中管理软件|局域网电脑集中管控怎么做

电脑集中管理软件|局域网电脑集中管控怎么做 电脑集中管理软件可以实现对员工工作情况的实时追踪&#xff0c;将工作效率情况采用可视化展示&#xff0c;管理者可根据图表发现员工工作效率低下的主要原因&#xff0c;并适当的调整&#xff0c;充分发挥员工的长处&#xff0c;从…

Python中表格插件Tabulate的用法

目录 一、引言 二、Tabulate插件安装与导入 三、Tabulate基本用法 1、创建表格&#xff1a; 2. 格式化表格&#xff1a; 3. 表格转置&#xff1a; 4、合并单元格&#xff1a; 5、指定每列的格式&#xff1a; 6、指定每行的格式&#xff1a; 7、使用自定义表格格式&am…

中级程序员——uniapp和小程序面试题

&#x1f604;博主&#xff1a;小猫娃来啦 &#x1f604;文章核心&#xff1a;uniapp和小程序面试题 文章目录 用uniapp有遇到一些兼容性问题吗&#xff1f;uniapp最大的优点是什么&#xff1f;uniapp如何实现多端兼容&#xff1f;uniapp是如何做跨端适配的&#xff1f;常用的u…

Docker Desktop 配置阿里云镜像加速

阿里云搜索镜像&#xff0c;打开容器镜像服务&#xff0c;复制镜像加速器地址 Docker Desktop 右上角设置&#xff0c;选择 Docker Engine&#xff0c;在配置中添加阿里云的镜像地址&#xff0c;右下 Apply & restart 即可。 "registry-mirrors": ["https…

轻松一刻|Walrus CLI与CI/CD工具集成,轻松部署2048游戏

Walrus 是一款开源的基于平台工程理念、以应用为中心、以完整应用系统自动化编排交付为目标进行设计开发的云原生应用平台&#xff0c;简化和自动化应用部署与发布流程并与现有的 CI/CD 流水线无缝集成。今天我们来点有趣的&#xff0c;跟随本教程&#xff0c;一起将 Walrus CL…

《Linux从练气到飞升》No.30 深入理解 POSIX 信号量与生产消费模型

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

德思特案例 | Skydel GNSS仿真引擎助力多所高校实现GNSS仿真测试教育

来源&#xff1a;德思特测量测试 德思特案例 | Skydel GNSS仿真引擎助力多所高校实现GNSS仿真测试教育 目前高校研究机构很难拥有用于定位、导航和定时&#xff08;PNT&#xff09;的测试和模拟工具&#xff0c;卫星导航相关的教育基本都是通过教科书或基于Matlab代码编程进行研…

11.22文心中国行走进厦门,把握大模型时代的产业新机遇

11月22日&#xff0c;文心中国行将走进厦门。届时&#xff0c;政府、高校及企业的相关专家将现场分享AI和大模型最新进展&#xff0c;从人工智能政策解读&#xff0c;到大模型底层技术&#xff0c;再到产教融合下的空间感知与计算&#xff0c;产业创新应用洞察及实践案例等等&a…

eclipse启动无法找到类(自定义监听器)

一.报错 二.排查 1.首先检查代码是否有问题 本人报错是找不到监听器&#xff0c;故检查监听器的代码和web.xml文件是否有问题 public class DoorListener implements ServletContextListener 监听器是否继承并实现ServletContextListener中的方法。 web.xml中&#xff1a; &…

Java 21:最新特性、性能改进和语言发展

文章目录 模式匹配和模式变量新的记录类型生产者接口本地类型推断的扩展新的垃圾收集器动态CDS档案G1垃圾收集器的增强Java语言的持续发展性能改进和JEPJava 21的部署和使用Java 21的生态系统结语 &#x1f389;欢迎来到Java学习路线专栏~Java 21&#xff1a;最新特性、性能改进…