tab栏切换的实现

2023-11-02

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>

效果图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tab栏切换的实现 的相关文章

  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 如何正确删除动画集中引用的 Raphael SVG 元素?

    我有一组动画 Raphael SVG 元素 我正在通过用户发起的 ajax 调用添加新元素并删除旧元素 我 set push 新元素 但因为我需要删除的元素通常不是集合中的最后一个元素 所以我使用 element remove 而不是 se
  • 当表格在 IE 中获得焦点时,表格滚动条会向上跳跃

    问题 我有一个table有包装的div with overflow y auto 一旦table获得焦点 滚动条向上跳 我怎样才能防止这种情况发生 我经历过这种行为IE9 不在 Chrome 中 请注意 我已添加tabindex到桌子上 以
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • CSS:如何在模糊的背景上剪切文本?

    我想重新创建以下样式 我想出了以下内容 问题是剪切不会影响模糊滤镜 我不知道如何解决它 这是我的 HTML 代码 glass width 40 height 100 position absolute background rgba 255
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • 从未使用 mimeType 初始化的 MediaRecorder 获取 mimeType

    我正在使用 MediaRecorder API 在页面上录制一些媒体 在我的 MediaRecorder 初始化中 我没有指定内容类型 因为我不需要任何特别的内容 浏览器可以选择它想要的 var mediaRecorder new Medi
  • 获取 byte[]

    我有一个 html 画布 如下所示 output is a base64string of image data var oldImage new Image oldImage onload function var resizeRatio
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 背景大小:封面在视网膜显示屏上看起来像素化

    可以看到我正在开发的网站here http ourcityourstory com dev 如果你查看 iPad 3 或 iPhone 4 上的 关于 或 联系 部分 背景看起来全都是疯狂的像素化 我有background size set
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • elk 笔记15--mapping

    elk 笔记15 mapping 1 mapping 简介 1 1 什么是mapping 1 2 为何移除多type 2 mapping 数据类型 3 mapping 元字段 4 mapping 参数 5 动态 mapping 6 常见 m
  • 3.Unity Shader 基础

    目录 一对好兄弟 材质和Unity Shader Unity中shader ShaerLab Unity Shader 的结构 1 创建 2 Properties 3 SubShader 状态设置 RenderSetup SubShader
  • hive永久注册udf函数小例子

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1217 注册UDF函数 1 helloUDF java中package信息需要修改 代码如下 package com maven udf p
  • ChatGLM2_6b安装

    Chatglm2 6b安装 一 安装要求 1 硬件 能否使用 或者以什么模式使用主要取决于显卡的显存 2 能否使用AMD显卡 可以 甚至可以使用CPU 但是需要降低精度 以CPU模式运行大概需要32GB 内存 二 工程与下载 官方路径 工程
  • 遇到问题之-yum update无法连接镜像问题解决

    yumupdate出现无法解析的错误 查看yum源设置也正确 然后查看本机DNS无法解析 通过防火墙开放DNS端口解决 然后还是无法yum安装 查看另外一台服务器和故障机配置都相同 但是yum正常 发现两者不同的是load的mirror是不
  • 物联网mqtt消息格式定义示例

    物联网mqtt消息格式定义示例 物联网mqtt通信流程 消息定义 应用下发到云 POST https 云服务器ip iot product id device id cmd Content Type application json X A
  • Spring MVC应用的开发步骤

    Spring MVC应用的开发步骤 Spring MVC应用的开发步骤 如果以异步方式提交请求 利用XML配置文件 配置控制器类 Spring MVC应用的开发步骤 下面简单介绍Spring MVC应用的开发步骤 在web xml文件中配置
  • Frida hook Java层

    往期推荐 frida环境安装 Xposed框架安装 使用及插件开发 HOOK startActivity HOOK框架 动态代理 需要相关资料的朋友 可以 加入此处即可打包获取 需要对在进程外传递的消息进行拦截处理就必须采取一种称为HOOK
  • Hexo博客开发之——七牛云图片批量下载

    一 前言 基于hexo Github搭建的静态博客 图片等资源的存储是一个问题 之前考虑过图片保存本地文件夹 图床 qiniu 微博 等 但是七牛存储的图片会有一些问题 使得我不得不考虑领寻图片等资源的存储问题 1 1 七牛图片存储的问题
  • UE4 加载流关卡(StreamingLevel)

    主要内容 本文主要讲解流关卡的加载卸载以及使用流关卡的好处 使用流关卡的好处在于利于多人协同合作 例如使用SVN进行项目开发时 各自上传或修改各自负责的关卡可以互不干扰 实现步骤 1 新建一个默认的主关卡和两个空的关卡 2 在主关卡里把两个
  • 解决 Ubuntu18.10 无法安装 Nvidia-docker2

    2023年5月18日更新 nvidia 原 github io 网页已废弃 更新了新的主页链接 2022年8月10日更新 很高兴看到这篇文章能够帮助一些同仁 在此更新一下 根据 https nvidia github io nvidia d
  • iOS核心动画CoreAnimation系统进阶(赛贝尔曲线-菜单侧滑动画拆分动画详解)

    我们知道动画是基于绘制的 多次绘制贝塞尔的过程就会形成动画 流畅的动画效果会给用户带来不一样的使用体验 下面我们就让App开发中经常使用到的侧滑动画进行拆分详解 效果图如下 为侧滑动画封装一个slideMenuView 绘制侧滑动画需要下面
  • Raft协议处理各种failover情况

    Raft协议处理各种failover情况 Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了 但论文依然发散的比较多 相对冗长 读完后掩卷沉思觉得还是整理一下才会更牢靠 变成真正属于自己的 这里我就借助
  • MYSQL数据库服务磁盘IO高问题分析与优化

    压力测试过程中 如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大 TPS逐渐降低等 而问题定位分析通常情况下 最优先排查的是监控服务器资源利用率 例如先用TOP 或者nmon等查看CPU 内存使用情况 然后在排查IO问题
  • java学生信息管理系统_毕业设计项目实例(含源码毕业论文)

    一 面向人群 学校的学生信息管理人员以及老师和学生 二 总体功能描述 本系统利用Java Web技术实现了学生信息管理系统 具有简单的学生信息管理功能 实现了以下功能模块 院系信息管理模块 学生信息管理模块 课程信息管理模块 成绩管理模块
  • http常见的特殊字符转义

    Http协议真的好严格 特殊字符诸如 等都会被当做转义字符处理 这样的话请求路径的参数就不对了 所以特殊字符要如下处理 空格 用 20代替 用 22代替 用 23代替 用 25代替 用 26代替 用 28代替 用 29代替 用 2B代替 用
  • python网页点击操作

    你好 在 Python 中 你可以使用 Selenium 库来进行网页点击操作 首先 你需要安装 Selenium pipinstall selenium 然后 你可以使用以下代码来打开浏览器并访问网页 from selenium impo
  • 结构体 & 枚举 在嵌入式开发中的巧妙使用

    结构体 枚举 提到结构体相信大家并不陌生 结构体顾名思义 是一种体 各种变量 的集合 方便了我们对于数据的管理和操作 在嵌入式开发中是必不可少要掌握的技能 那么我就通过举例子的方式给大家讲一下怎样使用结构体 第一种 普通式 我定义一个学生
  • Vue Test Utils

    单元测试 unit testing 是指对软件中的最小可测试单元进行检查和验证 在提供了经过测试的单元的情况下 系统集成过程将会大大地简化 开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上 而不是陷入充满很多Bug的单元之中不能
  • tab栏切换的实现

    Tab导航栏切换在网页场景中十分常见 本文将介绍如何用js来实现交互的导航栏 分析 1 当鼠标点击上面相应的选项卡 tab 下面盒子的内容跟随变化 2 点击某一个选项 当前这一个底色会变成红色 字体变白色 其余不变 3 下面的模块显示内容需