使用JS来实现tab栏切换

news2025/1/4 19:47:32

这是我今天从学习的知识点,今天试着做了一个tab栏切换,学到很多的知识点,讲师也比学校的老师讲的更加详细明白

个人名片:
 😊作者简介:一名大一在校生,web前端开发专业
 🤡 个人主页:几何小超
 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。
 🎅**学习目标: 坚持每一次的学习打卡,掌握更多知识!虽然都说前端已死,但是就算不靠这个吃饭,学一点东西总比啥也不知道的好
————————————————

所以今天我就来把我学的写成文章给大家欣赏一下下

HTML部分

标题部分<h3>

然后导航栏我们使用ul li加a的布局实现

然后第二个盒子开始放图片,放图片需要注意路径噢,不然回显示不出来

<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>

CSS部分

还是给咱们大盒子设置一个边框装内容

第一个是导航栏设置他的宽和父亲盒子一样宽

高是60px

line-height:然后呢这个是垂直居中

还是给一个弹性盒子,让他们根据宽度来进行合理的布局

大体的布局就是这样子,然后只需要修改字体大小颜色和内外边距即可

 * {
      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;
    }

JS部分

第一步我们需要给a的模块制作鼠标经过事件

所以第一步还是获取a元素

我们这里使用的是:document.querySelectorAll,因为要我们直接获取全部的a标签,所以我们写这个会更好,然后我们需要遍历这个a,运用到for循环

循环过后我们需要写一个鼠标经过的事件

mouseenter:是鼠标经过这个点执行下面的语句

然后我们如果选择第一个,那么我们第二个就不会显示出来,所以我们选择第一个的时候得干掉第二个,这时候我们就可以使用这行代码

 document.querySelector('.tab-nav .active').classList.remove('active')

ClassLIST.remove是消除的意思,消除我们的active这个元素

然后根据对应的序号需要在添加active

document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')

这里的意思是我们每选择一个那么我们就会增加一个元素,而前面经过后就会消除掉

这里我们使用ES6模板字符串会更加灵活,比以前语法更加方便

<Script>
    //1.a模块制作 要给5个链接绑定鼠标经过事件
    //1.1获取a元素
    const as=document.querySelectorAll('.tab-nav a')
    for(let i=0;i<as.length;i++){
      as[i].addEventListener('mouseenter',function(){
        // console.log('鼠标经过')
        // 排他思想,干掉别人,留住自己
        document.querySelector('.tab-nav .active').classList.remove('active')
        // 我登基 我添加active
        this.classList.add('active')
        //下面五个盒子一一对应 。item
        //干掉别人
       document.querySelector('.tab-content .active').classList.remove('active')
        //对应序号的那个item 显示添加active
        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')
        
      })
    }
   </Script>

这就是大概全部内容

接下来是源码

  1. <!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>
        //1.a模块制作 要给5个链接绑定鼠标经过事件
        //1.1获取a元素
        const as=document.querySelectorAll('.tab-nav a')
        for(let i=0;i<as.length;i++){
          as[i].addEventListener('mouseenter',function(){
            // console.log('鼠标经过')
            // 排他思想,干掉别人,留住自己
            document.querySelector('.tab-nav .active').classList.remove('active')
            // 我登基 我添加active
            this.classList.add('active')
            //下面五个盒子一一对应 。item
            //干掉别人
           document.querySelector('.tab-content .active').classList.remove('active')
            //对应序号的那个item 显示添加active
            document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')
            
          })
        }
       </Script>
    </body>
    
    </html>

素材来自于百度网盘 请输入提取码 apl的第二天

黑马教程还是很不错滴哈哈

看完记得给个三连噢!

 

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

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

相关文章

c#快速入门

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb; c#和c不同之处&#x1f449;&#x1f3fb;程序文件的…

三门问题的实验验证:贝叶斯概率公式实战

引言 数理统计与概率论经常出现在我们的日常生活中&#xff0c;如果能灵活掌握&#xff0c;可以起到很大的帮助。下面通过几个经典问题的探讨&#xff0c;浅入深出&#xff0c;更加深刻的理解贝叶斯全概率公式和贝叶斯公式的作用。 我的最深的体会就是&#xff0c;当某些已发生…

基于Go开发PaaS平台3

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 10-18 中间件前端页面以及核心API开发&#xff08;中&#xff09; C:\Users\Administrator\Desktop\gopaas\middlewareapi\handler\middlewareApiHandler.go package handlerimport ("context"…

【技术解决方案】企业如何从SpringBoot应用平滑迁移到云原生K8s平台

文章目录 在K8S上部署Spring Cloud Alibaba在Kubernetes上部署Spring Cloud Kubernetes在Kubernetes上部署Spring Boot应用方案对比分析拥抱Service Mesh关于DevopsServerless最佳实践 好久不见了&#xff0c;小伙伴们&#xff0c;你们最近还好吗&#xff1f;有没有想我&#x…

常量池介绍

什么是“字面量”和“符号引用”和"直接引用" 最近看jvm时遇到了“字面量”和“符号引用”这两个概念&#xff0c;它们被存放在运行时常量池&#xff0c;看了一些博客以后对这两个概念有了初步认识。 字面量可以理解为实际值&#xff0c;int a 8中的8和String a …

linux互斥锁(pthread_mutex)知识点总结

对于多线程程序来说&#xff0c;我们往往需要对这些多线程进行同步。同步&#xff08;synchronization&#xff09;是指在一定的时间内只允许某一个线程访问某个资源。而在此时间内&#xff0c;不允许其它的线程访问该资源。我们可以通过互斥锁&#xff08;mutex&#xff09;&a…

1、Vue.js---Vue核心

目录 Vue是什么 什么是渐进式&#xff1a; Vue 的特点 与其它 JS 框架的关联 Vue 周边库 搭建Vue开发环境&#xff08;2种方式&#xff09; 1、直接用 2、NPM Hello小案例 小结&#xff1a; 模板语法 代码 小结&#xff1a; 数据绑定 代码&#xff1a; 小结&…

11、渗透性测试及验收测试

目录 什么是安全测试 安全测试与常规测试的区别 SQL注入漏洞 SQL注入漏洞会带来以下几种常见的后果&#xff1a; SQL注入漏洞攻击流程 注入点类型 SQL注入的防范措施 XSS跨站脚本漏洞 XSS原理解析 XSS类型 1、反射型XSS 2、存储型XSS 3、存储型XSS 查找XSS漏洞的…

1.4. 运算符与表达式

在 Java 中&#xff0c;运算符是用于执行特定操作的符号&#xff0c;而表达式是由变量、常量和运算符组成的一段代码&#xff0c;用于计算值。本节将介绍 Java 中的常用运算符和表达式的使用。 1.4.1. 算术运算符 Java 支持以下算术运算符&#xff1a; 加法&#xff08;&…

C语言基础习题讲解

C语言基础习题讲解 运算符判断简单循环 运算符 1. 设计一个程序, 输入三位数a, 分别输出个,十,百位. (0<a<1000) 样例输入: 251 样例输出: 2 5 1 #include <stdio.h> int main() {int input 0;int x 0;int y 0;int z 0;scanf("%d", &input);x …

chatgpt赋能python:Python三次方函数介绍

Python三次方函数介绍 Python是一种流行的编程语言&#xff0c;用于各种应用程序&#xff0c;包括数据分析和机器学习。Python三次方函数是Python语言中的一个内置函数&#xff0c;可用于计算一个数字的三次方。本文将介绍Python三次方函数的相关内容并提供一些示例。 Python…

chatgpt赋能python:Python三个数相加的方法与应用

Python三个数相加的方法与应用 在现代编程语言中&#xff0c;Python是一个非常流行的语言。Python语言的的特点是易学易用、功能强大、语法简洁等。在Python中&#xff0c;运算也是非常方便的&#xff0c;特别是对于数值计算。本文将讨论如何在Python中实现三个数的加法运算&a…

LeetCode高频算法刷题记录11

文章目录 1. 最大正方形【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 在排序数组中查找元素的第一个和最后一个位置【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 搜索二维矩阵 II【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 翻转二叉树【简单】4.1 题目描述4.2…

POWERLINK协议在stm32单片机+w5500移植成功经验分享

连续折腾了多个晚上&#xff0c;又趁周末又花了一天时间&#xff0c;终于把powerlink协议移植成功到单片机上啦。本想放弃&#xff0c;但想了下不管我能不能用上&#xff0c;结个尾吧&#xff0c;分享给有需要的人。放弃并不难&#xff0c;但坚持一定很酷。为了移植测试这个协议…

Arcgis小技巧【13】——和数据统计相关的各种工具

在Arcgis中可以通过属性表中字段的【统计】功能或使用统计相关的工具对属性表进行数据统计。 在Arcgis工具箱中有一组【统计分析】工具集&#xff0c;不仅包含对属性数据执行标准统计分析&#xff08;例如平均值、最小值、最大值和标准差&#xff09;的工具&#xff0c;也包含…

表的增删改查

目录 表的增删改查create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换 retrieve(读取)SELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件英语不及格的同学及英语成绩 ( < 60 )&#xff08;<&#xff09;语文成绩在 […

个人博客-SpringBoot+Vue3项目实战(6)- 二次封装Axios

目录 前言新建axiosUtil.js 文件基本配置统一URL.env文件与环境变量示例参考资料 请求头超时时间 request 拦截器response 拦截器统一Api管理测试 前言 在上文中&#xff0c;我们封装了统一的后端数据返回结果&#xff0c;有了标准化的接口数据&#xff0c;我们就可以针对它&a…

【Linux性能优化】你知道什么是平衡负载么

什么是平衡负载 首先大家思考一下&#xff0c;当你发现自己的服务变慢时&#xff0c;你会首先使用什么命令来排查&#xff1f;我通常做的第一件事&#xff0c;就是执行top或者uptime命令来了解系统的负载情况。比如像下面这样&#xff0c;我在命令行里输入top命令&#xff0c;…

Springboot +spring security,创建SpringSecurity项目

一.简介 搭建第一个Spring Security项目&#xff0c;看看如何利用Spring Security来保护Java Web项目。 二. 创建SpringSecurity项目 我们这边使用idea进行创建。 2.1创建一个基于Maven的Project项目。 2.2设置项目名称和存储位置 2.3添加项目依赖 在pom.xml文件中&#x…

LeetCode 128 最长连续序列

LeetCode 128 最长连续序列 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/longest-consecutive-sequence/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给定一个未排…