当前位置: 首页 > news >正文

标题:探索 HTML 与 JavaScript 实现的选项卡切换效果

目录

一、HTML 结构设计

二、JavaScript 逻辑处理


一、HTML 结构设计

  • 在给定的 HTML 代码中,整体结构是创建了多个div元素,每个div元素都包含一个ul(无序列表)和一个div(用于展示内容)。
  • 每个ul元素中的li元素代表一个选项卡的标题,而与之对应的div元素中的子div元素则是每个选项卡标题对应的内容区域。
<div class="container"><ul class="tib_title"><li class="curent">title1</li><li>title2</li><li>title3</li><li>title4</li></ul><div class="tab_content"><div>content1</div><div>content2</div><div>content3</div><div>content4</div></div>
</div>
  • 这种结构设计清晰地将选项卡的标题和内容进行了分离,方便后续通过 JavaScript 进行交互操作。

二、JavaScript 逻辑处理

  • 代码主要通过 JavaScript 实现了选项卡的切换效果。
  • 获取元素与属性设置
    • 首先,通过document.querySelectorAll获取所有的.container元素。对于每个.container,再获取其中的li元素(tab_title_li)和内容div元素(tab_content_div)。
    • 为每个li元素设置一个index属性,用于标记其在选项卡标题中的位置。
var container = document.querySelectorAll(".container");
for (h = 0; h < container.length; h++) {var tab_title_li = container[h].querySelectorAll("li");for (var i = 0; i < tab_title_li.length; i++) {tab_title_li[i].setAttribute("index", i);}
}
  • 事件绑定与效果实现
    • 为每个li元素绑定mouseenter事件。当鼠标移入某个li元素时,先清除所有li元素的类名,然后将当前li元素的类名设置为curent
    • 根据当前li元素的index属性,找到对应的内容div元素,并将其display属性设置为block,其他内容div元素的display属性设置为none,从而实现选项卡内容的切换。
tab_title_li[i].onmouseenter = function () {var curent_tab_title_li = this.parentNode.children;for (var j = 0; j < curent_tab_title_li.length; j++) {curent_tab_title_li[j].className = "";}this.className = "curent";var curent_index = this.getAttribute("index");var curent_tab_content_div = this.parentNode.nextElementSibling.children;for (var k = 0; k < curent_tab_content_div.length; k++) {if (curent_index == k) {curent_tab_content_div[k].style.display = "block";} else {curent_tab_content_div[k].style.display = "none";}}
};
  • 这种处理方式实现了一个简单而有效的选项卡切换效果,通过鼠标移入不同的选项卡标题,对应的内容区域就会显示出来。

通过对这段 HTML 和 JavaScript 代码的分析,我们可以看到如何巧妙地结合 HTML 的结构设计和 JavaScript 的交互逻辑来实现一个常见的网页交互效果 - 选项卡切换。这其中涉及到了元素的获取、属性的设置以及事件的绑定等多个方面的知识。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【微前端记录】微前端qiankun初体验
  • Benchmark.NET:让 C# 测试程序性能变得既酷又简单
  • 【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统
  • springboot提升-多数据源配置
  • 使用C#在指定目录下创建文件夹的全面指南
  • Adobe Illustrator非矢量图片的交集利用剪切蒙版实现
  • 设计模式应用
  • OpenCV 之 模版匹配多个对象、图片旋转 综合应用
  • Java 面试题:从源码理解 ThreadLocal 如何解决内存泄漏 ConcurrentHashMap 如何保证并发安全 --xunznux
  • 深入解析Flink SQL:基本概念与高级应用
  • 生活杂记1
  • C#基础(6)值类型和引用类型
  • 【鸿蒙 HarmonyOS NEXT】使用EventHub进行数据通信
  • java 防重复提交
  • P2343 宝石管理系统
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Java程序员幽默爆笑锦集
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Python socket服务器端、客户端传送信息
  • python学习笔记-类对象的信息
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 分类模型——Logistics Regression
  • 给Prometheus造假数据的方法
  • 如何合理的规划jvm性能调优
  • 十年未变!安全,谁之责?(下)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​力扣解法汇总946-验证栈序列
  • $.proxy和$.extend
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (day 12)JavaScript学习笔记(数组3)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (排序详解之 堆排序)
  • (五)activiti-modeler 编辑器初步优化
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)平衡树
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)gtest单元测试
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core中的时区转换问题
  • .net framework profiles /.net framework 配置
  • .Net MVC4 上传大文件,并保存表单
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET框架
  • .NET企业级应用架构设计系列之结尾篇
  • @AliasFor注解
  • @ModelAttribute使用详解
  • @Validated和@Valid校验参数区别
  • @拔赤:Web前端开发十日谈
  • [04] Android逐帧动画(一)
  • [C++] vector对比list deque的引出
  • [C++]spdlog学习