Tab导航栏切换在网页场景中十分常见,本文将介绍如何用js来实现交互的导航栏。
分析:
1.当鼠标点击上面相应的选项卡(tab),下面盒子的内容跟随变化
2.点击某一个选项,当前这一个底色会变成红色,字体变白色,其余不变。
3.下面的模块显示内容需要和上面选项卡一一对应,互相匹配。
思路:可以给选项卡添加自定义属性(索引号index),属性值从0开始编号。当点击某个选项卡,下面模块显示对应index的内容,其余隐藏。(排他思想)
一、自定义属性
1.自定义属性的目的
为了保存并使用数据,可以避免复杂的操作,数据不用存储到数据库中。
2.自定义属性的操作
自定义属性和元素自带属性不同,它是由程序员自己定义的属性。对属性的操作不再用”对象.属性“的形式,下面举例介绍下三个操作方法:<div data-index='1'></div>
div.getAtrribute(‘data-index’):获取属性data-index的值
div.setAttribute(‘data-set’,‘2’): 添加属性data-set且值为‘2’
div.removeAttribute(‘data-set’):移除data-set属性
3.规范
由于有些自定义属性很容易引起分歧,不容易判断是元素的内置属性还是自定属性,H5规定自定义属性data-开头做为属性名并且赋值。
同时还引入了dataset集合,它是一个存放了所有以data开头的自定义属性集合。我们可以用它来取值。
例如:
<div data-index='0'></div>
用div.dataset[index’]或者div.dataset.index取值
HTML:
<div class="tab"> <div class="tab_list"> <ul> <li class="current">商品介绍</li> <li>规格与包装</li> <li>商品评价(100万+)</li> <li>售后保障</li> </ul> </div> <div class="tab_con"> <div class="item"> 品牌:Apple 商品名称:AppleiPhone 12 操作系统:iOS(Apple) 商品编号:100009077475 商品毛重:320.00g </div> <div class="item"> 规格与包装 主体 首销日期:23日 产品名称:iPhone 12 上市月份:10月 入网型号:A2404 上市年份:2020年 </div> <div class="item"> 商品评价 运行非常流畅,轻松到手⑤千1,是从底下视频拿到的!拍照效果一流,这款刚出来的紫色非常喜欢,外形设计漂亮,屏幕显示出众,音质也非常完美,不错的。手机包装也很好,发货速度很快,非常的漂亮,很喜欢。双摄像头拍照,很快5G运行,速度也很棒非常的满意。双扬声器音质很棒,新的外观设计看起来非常的绚丽,手感也很好,玻璃质感很好。系统确认比安卓的流畅多了,尺寸刚刚好,不会太大屏幕细腻,色彩还原度高,采用高通基带,5G信号还是不错的,上网速度快特别喜欢紫色,颜值特别高没办法不热爱。当收藏款来购买的啊,这次京东商城活动力度大就入手了。非常流畅,屏幕显示细腻,看着很舒服,夜景提升很大,拍出来的效果非常符合苹果的水准,和以往的苹果无home键,需要点时间去适应。手机外型尺寸正合适,对经典的直角边设计也非常适应。使用感受特别好,开机顺畅,按键灵敏,运行速度快,待机时间长,音效好,拍照清晰,内存足够充足!立刻下载了好多实用软件,非常开心!太小刚刚好,挺顺手的,经典的直边边框手感不错,苹果的优势是系统,系统不用说了,运行流畅的代名词。非常流畅,屏幕显示细腻,看着很舒服,夜景提升很大,拍出来的效果非常符合苹果的水准。 </div> <div class="item"> 售后保障模块内容 厂家服务 本商品质保周期为1年质保,在此时间范围内可提交维修申请,具体请以厂家服务为准。 如因质量问题或故障,凭厂商维修中心或特约维修点的质量检测证明,享受7日内退货,15日内换货,15日以上在质保期内享受免费保修等三包服务! (注:如厂家在商品介绍中有售后保障的说明,则此商品按照厂家说明执行售后保障服务。) </div> </div> </div>
复制
CSS:
<style> .tab { margin: 0 auto; width: 800px; padding-top: 20px; } .tab_list { height: 50px; border-bottom: 1px solid red; } .tab_list ul { padding-left: 0px; height: 50px; } .tab li { float: left; display: inline-block; box-sizing: border-box; padding-left: 20px; padding-right: 20px; text-align: center; height: 50px; line-height: 50px; margin: 0; } .item { display: none; } .current { background-color: brown; color: white; } </style>
复制
JS:
<script> var tab_list = document.querySelector('.tab_list'); var list = tab_list.querySelectorAll('li');//获取所有的选项卡标签 var items = document.querySelectorAll('.item');//获取所有的内容显示模块 //在循环中添加点击事件,为每个选项卡添加索引index for (var i = 0; i < list.length; i++) { list[i].setAttribute('index', i); //排他思想 list[i].onclick = function() { //1.点击后先消除所有选项卡的样式 for (var i = 0; i < list.length; i++) { list[i].className = ''; } //2.绑定当前选项卡的样式(实现背景色变红) this.className = 'current'; //内容显示模块 var index = this.getAttribute('index');//先获得当前点击选项卡的索引值 //1.将所有模块隐藏 for (var i = 0; i < items.length; i++) { items[i].style.display = 'none'; } //2.再显示对应index下的模块 items[index].style.display = 'block'; } } </script>
复制
效果图: