day38-Mobile Tab Navigation(手机tab栏导航切换)

news2024/12/23 19:10:07

50 天学习 50 个项目 - HTMLCSS and JavaScript

day38-Mobile Tab Navigation(手机tab栏导航切换)

效果

在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Mobile Tab Navigation</title>
    <!-- 图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"
        integrity="sha512-1PKOgIY59xJ8Co8+NE6FZ+LOAZKjy+KY8iq0G4B3CyeY6wYHN3yt9PW0XpSriVlkMXe40PTKnXrLnZ9+fkDaog=="
        crossorigin="anonymous" />
    <link rel="stylesheet" href="style.css" />
</head>

<body>
    <!-- 手机 -->
    <div class="phone">
        <!-- 图片 -->
        <img src="https://images.unsplash.com/photo-1480074568708-e7b720bb3f09?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1053&q=80"
            alt="home" class="content show">
        <img src="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80"
            alt="work" class="content">
        <img src="https://images.unsplash.com/photo-1471107340929-a87cd0f5b5f3?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1266&q=80"
            alt="blog" class="content">
        <img src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1351&q=80"
            alt="about" class="content">
        <!-- 手机底部导航 -->
        <nav>
            <ul>
                <li class="active">
                    <i class="fas fa-home"></i>
                    <p>首页</p>
                </li>
                <li>
                    <i class="fas fa-box"></i>
                    <p>工作</p>
                </li>
                <li>
                    <i class="fas fa-book-open"></i>
                    <p>博客</p>
                </li>
                <li>
                    <i class="fas fa-users"></i>
                    <p>关于</p>
                </li>
            </ul>
        </nav>
    </div>
    <script src="script.js"></script>
</body>

</html>

style.css

@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');

* {
    box-sizing: border-box;
}

body {
    background-image: linear-gradient(to right,
            blue 0%,
            skyblue 50%,
            blue 100%);
    font-family: 'Open Sans', sans-serif;
    /* 子元素居中 */
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    margin: 0;
}

/* 手机 */
.phone {
    position: relative;
    /* 超出部分隐藏 */
    overflow: hidden;
    border: 5px solid #eee;
    border-radius: 15px;
    height: 600px;
    width: 340px;
}

/* 图片 */
.phone .content {
    /* 隐藏 */
    opacity: 0;
    /* 图片覆盖手机 */
    object-fit: cover;
    position: absolute;
    top: 0;
    left: 0;
    height: calc(100% - 60px);
    width: 100%;
    transition: opacity 0.4s ease;
}

/* 显示 */
.phone .content.show {
    opacity: 1;
}

/* 底部导航 */
nav {
    position: absolute;
    bottom: 0;
    left: 0;
    margin-top: -5px;
    width: 100%;
}

nav ul {
    background-color: #fff;
    display: flex;
    /* 去除小圆点 */
    list-style-type: none;
    padding: 0;
    margin: 0;
    height: 60px;
}

nav li {
    color: #777;
    cursor: pointer;
    /* flex 平分每一项 */
    flex: 1;
    padding: 10px;
    text-align: center;
}

nav ul li p {
    font-size: 12px;
    margin: 2px 0;
}

nav ul li:hover,
nav ul li.active {
    color: blue;
}

script.js

// 重点 flex classList 注意:在html中一定要使用active和show各一个,否则js中8,9行报错
// 图片用的是定位和opacity
// 1.获取元素节点
const contents = document.querySelectorAll('.content')//所有图片
const listItems = document.querySelectorAll('nav ul li')//所有导航项
// 2.遍历绑定 点击事件
listItems.forEach((item, idx) => {
    item.addEventListener('click', () => {
        document.querySelector('nav ul li.active').classList.remove('active')
        document.querySelector('.content.show').classList.remove('show')
        // console.log(this);//this为window 由于箭头函数的原因
        item.classList.add('active')
        contents[idx].classList.add('show')
    })
})


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

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

相关文章

Cesium态势标绘专题-多边形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

mybatis_使用

第一步&#xff1a; 编写接口 第二步&#xff1a; 编写对应的mapper中的sql语句 第三步&#xff1a; 测试 CRUD <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http…

喜报 | 擎创科技入选2023中国金融科技竞争力百强榜

2023中关村金融科技论坛——第七届金融科技与金融安全峰会已圆满落幕。本次峰会主要围绕银行科技、保险科技、新一代信息技术、互联网3.0展开专题论坛&#xff0c;共有千余位金融机构和科技公司相互分享研究成果、探索前沿知识、交流实践经验。 会议上正式公布了“2023中国金融…

C++ 引用型别未定义

什么是引用型别未定义呢&#xff1f;&#xff08;首先是基本数据类型的&#xff09; 在使用函数的时候&#xff0c;我们在给函数传参的时候可能会传入一个左值也可能是右值。当我们使用如下函数funtion的时候&#xff0c;会在控制台打印什么样的结果呢&#xff1f;&#xff08;…

fastadmin框架重定向

由于&#xff0c;我们一打开fastadmin框架就进入到前端页面很麻烦&#xff0c;下面这种方法可以解决这个问题。 首先我们找到这个路径 找到重定向&#xff0c; application》index》controller》index 原本文件是这个样子&#xff1a; <?phpnamespace app\index\controll…

Redisson实现简单消息队列:优雅解决缓存清理冲突

在项目中&#xff0c;缓存是提高应用性能和响应速度的关键手段之一。然而&#xff0c;当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时&#xff0c;容易引发缓存清理冲突&#xff0c;导致缓存失效的问题。为了解决这一难题&#xff0c;我们采用Redisson的消息队列…

SuperCLUE中文大模型排行榜(2023年7月)

中文通用大模型综合性测评基准&#xff08;SuperCLUE&#xff09;&#xff0c;是针对中文可用的通用大模型的一个测评基准。 它主要要回答的问题是&#xff1a;在当前通用大模型大力发展的情况下&#xff0c;中文大模型的效果情况。包括但不限于&#xff1a;这些模型哪些…

思科设备静态路由配置

一、静态路由基本知识 路由器的主要功能就是用来转发IP 数据包以使数据包到达正确的目的主机。可以想象数据包到达路由器就像一辆汽车开到十字路口&#xff0c;路由表就类似路标&#xff0c;列出可能到达的目的地&#xff0c;以及应该选择哪条路到达目的地。 路由器必须要有相应…

Cesium态势标绘专题-圆形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Set集合类详解(附加思维导图)

目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①&#xff1a;add…

Docker安装Elasticsearch相关软件安装

Docker安装Elasticsearch相关软件安装 本文将介绍通过 Docker 的方式安装 Elasticsearch 相关的软件。 1、Docker安装Elasticsearch 1.1 搜索镜像 $ docker search elasticsearch $ docker search elasticsearch:7.12.11.2 拉取镜像 $ docker pull elasticsearch:7.12.11.…

# jellyfin安装设置使用散记

jellyfin安装设置使用散记 文章目录 jellyfin安装设置使用散记0 软件简介1 安装2 视频转码问题2.1 局域网转码情况测试&#xff08;不同网段&#xff09;2.2 局域网jellyfin app默认转码问题解决2.3 外网转码情况测试 3 一些坑4 插件5 最后 0 软件简介 Jellyfin 是一个自由的软…

ConcurrentHashMap 相比于 HashMap 的优势

ConcurrentHashMap 使用每个链表头节点作为锁对象, 把一把大锁转换成多把小锁, 大大缩小了锁冲突的概率 HashTable 是给整个 Hash 表加锁, 因此只要有线程抢到了锁其他线程就得阻塞等待. ConcurrentHashMap 是对每个链表加锁, 因此只要不是对同一个链表进行修改就不会阻塞, 大…

linux 查看网卡,网络情况

1&#xff0c;使用nload命令查看 #yum -y install nload 2&#xff0c; 查看eth0网卡网络情况 #nload eth0 Incoming也就是进入网卡的流量&#xff0c;Outgoing&#xff0c;也就是从这块网卡出去的流量&#xff0c;每一部分都有下面几个。 – Curr&#xff1a;当前流量 – Avg…

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。

目前的页面样式为&#xff1a; 代码是&#xff1a; <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…

13 QT资源文件导入

导入资源: 1&#xff1a;将资源文件放入到项目目录下 2&#xff1a;添加资源文件 2.1&#xff1a;右键项目->添加新文件->Qt->Qt Resource file ->给资源文件命名 ex: res ->生成res.qrc 3&#xff1a;编辑资源文件 3.1&#xff1a;添加前缀 3.2&#xff1a;…

荧光效率的测试原理-荧光量子效率测试系统

荧光染料是一种新型染料,它既有常规染料的着色特性,又能发射出荧光,使得织物的饱和度和鲜艳度提高,广泛用于纺织、服装等领域。目前,荧光染料在防伪、分子探针等方面的应用也方兴未艾。由于荧光染料在科技和人们的生活中得到了越来越多的应用,对其测配色的研究也引起了颜色学家…

数据中心蓄电池监测,这个方法太好用了!

在数字化时代&#xff0c;数据机房扮演着至关重要的角色&#xff0c;成为企业和组织保障信息安全和业务稳定运行的关键枢纽。 数据中心的可靠性和持续运行并不仅仅依赖于稳定的电力供应&#xff0c;而是需要多层次的保障措施。其中&#xff0c;蓄电池监控系统作为数据中心不可或…

多城市同城分类信息发布h5公众号系统开发

多城市同城分类信息发布h5公众号系统开发 1&#xff1a;分类信息&#xff0c;商户入驻&#xff0c;红包广告&#xff0c;同城动态&#xff0c;代理加盟。 2&#xff1a;全国版&#xff0c;多城市版&#xff0c;本地版自由切换。 3&#xff1a;付费发帖&#xff0c;付费置顶、付…

【高危】Foxit 福昕PDF阅读器 Field Calculate 释放后使用漏洞(PoC)

漏洞描述 Foxit PDF阅读器是福昕软件公司推出的一款广泛使用的PDF文档阅读器。 在受影响版本中&#xff0c;由于其javascript引擎存在use-after-free漏洞&#xff0c;攻击者可以构造恶意的PDF文件&#xff0c;通过文件中包含的deletePages()等操作使福昕PDF阅读器过早删除与页…