day47-Testimonial Box Switcher(推荐箱切换器-动态进度条自动更新卡片信息)

news2024/9/29 1:19:21

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

day47-Testimonial Box Switcher(推荐箱切换器-动态进度条自动更新卡片信息)

效果

在这里插入图片描述

在这里插入图片描述

index.html

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

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <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" />
    <title>Testimonial Box</title>
</head>

<body>
    <!-- 推荐箱容器 -->
    <div class="testimonial-container">
        <!-- 进度条 -->
        <div class="progress-bar"></div>
        <!-- 字体图标 -->
        <div class="fas fa-quote-right fa-quote"></div>
        <div class="fas fa-quote-left fa-quote"></div>
        <!-- 推荐信  -->
        <p class="testimonial">
            我曾与数百名HTML/CSS开发人员合作过,我不得不说这个家伙是最优秀的。这家伙是个了不起的开发者。他强调良好、干净的代码,并注重细节。我喜欢那些尊重经过深思熟虑的设计的每一个方面,并尽最大努力将其写入代码的开发人员。他超越并将艺术转化为像素-每次都没有故障。
        </p>
        <!-- 人物 -->
        <div class="user">
            <img src="https://randomuser.me/api/portraits/women/46.jpg" alt="user" class="user-image" />
            <!-- 人物细节 -->
            <div class="user-details">
                <h4 class="username">Miyah麦尔斯</h4>
                <p class="role">营销</p>
            </div>
        </div>
    </div>
    <script src="script.js"></script>
</body>

</html>

style.css

@import url('https://fonts.googleapis.com/css?family=Montserrat');

* {
    box-sizing: border-box;
}

body {
    background: url('https://source.unsplash.com/random') no-repeat center/cover;
    font-family: 'Montserrat', sans-serif;
    /* 子元素竖直居中 */
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
    padding: 10px;
}

/* 推荐箱 */
.testimonial-container {
    background-color: #476ce4;
    color: #fff;
    border-radius: 15px;
    margin: 20px auto;
    padding: 50px 80px;
    max-width: 768px;
    position: relative;
}

/* 字体图标 “” */
.fa-quote {
    color: rgba(255, 255, 255, 0.3);
    font-size: 28px;
    position: absolute;
    top: 70px;
}

/* “ */
.fa-quote-right {
    left: 40px;
}

/* ” */
.fa-quote-left {
    right: 40px;
}

/* 推荐信 */
.testimonial {
    line-height: 28px;
    text-align: justify;
}

/* 人物 */
.user {
    display: flex;
    align-items: center;
    justify-content: center;
}

/* 头像 */
.user .user-image {
    border-radius: 50%;
    height: 75px;
    width: 75px;
    object-fit: cover;
}

/* 细节 */
.user .user-details {
    margin-left: 10px;
}

/* 姓名 */
.user .username {
    margin: 0;
}

/* 角色 */
.user .role {
    font-weight: normal;
    margin: 10px 0;
}

/* 进度条 */
.progress-bar {
    background-color: #fff;
    height: 4px;
    width: 100%;
    /* 动画 infinite 反复执行*/
    animation: grow 10s linear infinite;
    /* 转换起点为左边 */
    transform-origin: left;
}

@keyframes grow {
    0% {
        /* 将元素沿着X轴缩放为0倍,也就是将其压扁成一条直线,宽度为0,但高度不变。实际上,这会使元素在水平方向上消失,不再可见。 */
        transform: scaleX(0);
    }
}

/* 响应式布局 */
@media (max-width: 768px) {
    .testimonial-container {
        padding: 20px 30px;
    }

    .fa-quote {
        display: none;
    }
}

script.js


// 重点 flex position transform: scaleX(0); animation: grow 10s linear infinite; 解构
// 1.获取元素节点
const testimonialsContainer = document.querySelector('.testimonials-container')//推荐箱容器
const testimonial = document.querySelector('.testimonial')//推荐信
const userImage = document.querySelector('.user-image')//头像
const username = document.querySelector('.username')//姓名
const role = document.querySelector('.role')//角色
// 定义数组存储所有推荐信
const testimonials = [
    {
        name: 'Miyah麦尔斯',
        position: '营销',
        photo:
            'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=707b9c33066bf8808c934c8ab394dff6',
        text:
            "我曾与数百名HTML/CSS开发人员合作过,我不得不说这个家伙是最优秀的。这家伙是个了不起的开发者。他强调良好、干净的代码,并注重细节。我喜欢那些尊重经过深思熟虑的设计的每一个方面,并尽最大努力将其写入代码的开发人员。他超越并将艺术转化为像素-每次都没有故障。",
    },
    {
        name: '六月查',
        position: '软件工程师',
        photo: 'https://randomuser.me/api/portraits/women/44.jpg',
        text:
            '这个家伙是一个了不起的前端开发人员,他交付的任务正是我们需要的,帮你自己一个忙,雇佣他,你不会对交付的工作感到失望。他会加倍努力确保你对你的项目感到满意。我一定会再和他合作!',
    },
    {
        name: '伊达·尼斯卡宁',
        position: '数据输入',
        photo: 'https://randomuser.me/api/portraits/women/68.jpg',
        text:
            "这家伙工作很努力。与他的沟通也很好,他一直都很有反应,这在许多自由职业者身上是不容易找到的。我们一定和他再来一次。",
    },
    {
        name: '蕾妮·西姆斯',
        position: '接待员',
        photo: 'https://randomuser.me/api/portraits/women/65.jpg',
        text:
            "这家伙竭尽所能把工作做好。这是我第二次雇他,以后还会再雇他。",
    },
    {
        name: '乔纳森',
        position: '平面设计师',
        photo: 'https://randomuser.me/api/portraits/men/43.jpg',
        text:
            "我担心由于截止日期太紧,这个项目无法完成。但是这个家伙证明了我错了,他不仅交出了一份出色的工作,而且还设法在截止日期前一天交出了工作。当我要求修改时,他在几分钟内就修改好了。我期待着再次与他合作,我完全推荐他。再次感谢!",
    },
    {
        name: '萨莎何',
        position: '会计',
        photo:
            'https://images.pexels.com/photos/415829/pexels-photo-415829.jpeg?h=350&auto=compress&cs=tinysrgb',
        text:
            '这家伙是一个顶尖的设计师和前端开发人员。他善于沟通,工作速度快,工作质量高。我们很幸运能和他一起工作!',
    },
    {
        name: '杰克翰',
        position: '导演',
        photo: 'https://randomuser.me/api/portraits/men/97.jpg',
        text:
            '这家伙是一个年轻而有才华的IT专业人士,积极主动,负责任,有很强的职业道德。他非常擅长PSD2HTML转换和HTML/CSS技术。他学东西很快,渴望学习新技术。他很专注,有很好的动力来完成预定的日期和出色的结果。',
    },
]
// 当前展示的数据的索引
let idx = 1
// 更新展示的推荐箱
function updateTestimonial() {
    const { name, position, photo, text } = testimonials[idx]

    testimonial.innerHTML = text
    userImage.src = photo
    username.innerHTML = name
    role.innerHTML = position
    // +1 即下一个,方便下次更新时渲染
    idx++
    //如果索引大于最大索引,则渲染第一个
    if (idx > testimonials.length - 1) {
        idx = 0
    }
}
// 开启间歇器 10000为进度条动画的时间
setInterval(updateTestimonial, 10000)

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

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

相关文章

Docker续集+Docker Compose

目录 Containerd与docker的关系 runCrunC与Containerd的关联 OCI协议Dockerfile多阶段构建&#xff08;解决&#xff1a;如何让一个镜像变得更小 &#xff09;多阶段构建Images瘦身实践.dockerignore Docker Compose快速开始Quick StartCompose 命令常用命令命令说明 Compose 模…

11. Mybatis 的增删查改【万字详解】

目录 1. 数据的查找 select 1.1 查询所有数据 1.2 通过 id 进行查找 2. 插入数据 insert 3. 修改数据 update 4. 删除数据 delete 5. $ 和 # 的区别 5.1 SQL 注入 用户登录 6. Spring Boot 打印 SQL 日志 7. order by 排序 8. like 查询 9. 通过页面返回数据 10. …

C++--菱形继承

1.什么是菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承的问题&#xff1a;菱形继承有数据冗余和二义性的问题&#xff0c;数据冗余是由于创建多个相同类型的…

【C++】优先级队列的基本概念以及其模拟实现

文章目录 补充知识&#xff1a;仿函数一、优先级队列&#xff1a;1.引入2.介绍 二、priority_queue的模拟实现1.大体框架2.私有成员函数&#xff1a;1.向下调整&#xff08;AdjustDown&#xff09;2.向上调整&#xff08;AdjustUp&#xff09; 3.公有成员函数1大小&#xff08;…

Windows驱动第一节(什么是驱动?)

本文来自微软,由本人兴趣爱好人工翻译(非机翻) What is a driver? - Windows drivers | Microsoft Learn 我想很难给驱动这个词一个准确的定义.最基础的定义是驱动是一个用于让操作系统和硬件设备通信的软件组件. 举一个例子,假设一个应用程序需要从硬件设备读取一些数据,这…

2023河南萌新联赛第(三)场:郑州大学 A - 发工资咯

2023河南萌新联赛第&#xff08;三&#xff09;场&#xff1a;郑州大学 A - 发工资咯 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 一个公司有n个人&#xff0c;每个月都…

C++类与对象 - 3(拷贝构造函数和运算符重载)(超详细)

C类与对象 - 3 1. 拷贝构造函数1.1 概念1.2 特征 2. 赋值运算符重载2.1 运算符重载2.2 赋值运算符重载记点2.3 前置和后置重载 3. const成员函数记点 4. 取地址及const取地址操作符重载 1. 拷贝构造函数 1.1 概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#x…

RK3566 android代码编译

一、搭建环境 所用的ubuntu系统之前已编译过linux代码&#xff0c;所以只需安装编译android所需的环境。 安装jdk-8 如果之前系统没有安装则执行以下命令安装&#xff1a; sudo apt-get install openjdk-8-jdk 查看当前系统是否有jdk-8 $ sudo update-alternatives --conf…

奇舞周刊第 501 期:前端打包加个性能插件检测~ 性能不过关就发邮件告诉领导!...

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 前端打包加个性能插件检测~ 性能不过关就发邮件告诉领导&#xff01; 本文作者结合 Lighthouse 是一个开源的自动化工具&#xff0c;给组内的项目都在 CICD 流程上更新上了性能守卫…

每日一博 - How To Improve API Performance

文章目录 包括但局限于以下措施1. 采用分页显示2. 异步记录日志3. 利用缓存技术4. 实施负载压缩5. 管理数据库连接池 包括但局限于以下措施 1. 采用分页显示 当查询结果过多时&#xff0c;将结果分为多个页面进行显示&#xff0c;可以有效地提高系统的响应速度。这样&#xff…

高效率,38V最大输入单电感同步升/降稳压器SYV939C

SYV939是一种高压同步降压-升压转换器。该器件工作在4V至28V的宽输入电压范围内&#xff0c;具有10max平均电感电流能力。四个集成的低RDS(ON)开关最大限度地减少了传导损耗。 SYV939c包括完整的保护功能&#xff0c;如输出过流/短路保护&#xff0c;过压保护和热停机&#xff…

找到刀郎《罗刹海市》--微信小程序调用地图--【小程序花园】

微信目录集链接在此&#xff1a; 详细解析黑马微信小程序视频–【思维导图知识范围】难度★✰✰✰✰ 不会导入/打开小程序的看这里&#xff1a;参考 让别人的小程序长成自己的样子-更换window上下颜色–【浅入深出系列001】 文章目录 本系列校训学习资源的选择地图在小程序里…

数据库的下一个变革方向——云原生数据库

快速上手亚马逊云原生数据库 数据库免费试用及在线大会 亚马逊数据库产品支持免费试用&#xff0c;并且提供上手教程。【数据库免费试用&上手教程】 回看人类历史上每一次技术的跨越&#xff0c;生产力变革永远不会缺席。“云原生数据库”也已经悄然走到了第十个年头。未…

RabbitMQ 教程 | 客户端开发向导

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

后台管理系统中常见的三栏布局总结:使用element ui构建

vue2 使用 el-menu构建的列表布局&#xff1a; 列表可以折叠展开 <template><div class"home"><header><el-button type"primary" click"handleClick">切换</el-button></header><div class"conte…

Arcgis画等高线

目录 数据准备绘制等高线3D等高线 今天我们将学习如何在ArcGIS中绘制等高线地图。等高线地图是地理信息系统中常见的数据表现形式&#xff0c;它通过等高线将地形起伏展现得一目了然&#xff0c;不仅美观&#xff0c;还能提供重要的地形信息。 数据准备 在开始之前&#xff0c…

【javaSE】 类和对象详解

目录 面向对象的初步认知 什么是面向对象 面向对象与面向过程 类定义和使用 简单认识类 类的定义格式 注意事项 练习定义类 定义一个狗类 定义一个学生类 注意事项 类的实例化 什么是实例化 注意事项 类和对象的说明 this引用 为什么要有this引用 什么是this引…

FSM:Full Surround Monodepth from Multiple Cameras

参考代码&#xff1a;None 介绍 深度估计任务作为基础环境感知任务&#xff0c;在基础上构建的3D感知才能更加准确&#xff0c;并且泛化能力更强。单目的自监督深度估计已经有MonoDepth、ManyDepth这些经典深度估计模型了&#xff0c;而这篇文章是对多目自监督深度估计进行探…

实用科研网站(自用)

网站网址Papers With Codehttps://paperswithcode.com/AMinerhttps://www.aminer.cn/Connected Papershttps://www.connectedpapers.com/ Papers With Code Papers With Code&#xff0c;在这个网站上可以看到最新的机器学习信息&#xff0c;如&#xff1a;当前研究热点、趋势…

matplotlib从起点出发(6)_Tutorial_6_Animations

1 在matplotlib中使用动画 基于其绘图功能&#xff0c;matplotlib还提供了一个使用动画模块生成动画animation的接口。动画是一系列帧&#xff0c;其中每个帧对应于图形Figure 上的一个绘图。本教程介绍了有关如何创建此类动画的一般准则以及可用的不同选项。 import matplot…