React + css3 实现circle圆环进度条加载

2023-10-27

这里写图片描述
【需求效果图:如上图所示】

需求:动态获取不同的分数,圆环展示对应的百分比分数值:

  • 正确率 70%以下提示文案:还需要继续加油哦~
  • 正确率 70% - 90%以下提示文案:不错,再加把劲~
  • 正确率 90%及以上提示文案:真棒!
    数据描述:不同的测试分数显示不同的分数百分比
    百分比分数字段:score

因为分数是动态获取的,所以 在React中,肯定是需要通过state来更改分数的百分比的.
我先解释一下代码实现的原理,看懂原理后,实现起来就很轻松了。
【以下有图有真相,图片更方便你理解原理】

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

外层的实心圆其实就是一个border为5px(线条粗一点的)实线而已。通过transform: rotate()transition: transform 1s; 来控制旋转角度和1s的进度条动画波动。

大圆的进度条:
可以划分为 左右两部分:
左半部分又分为左上部分和左下部分构成。
右半部分又分为右上部分和右下部分构成。

这里写图片描述

配合上面的动图和我画的那张图,结合上面的解释,应该就可以把页面开发好了,如果你开发圆形动图遇到和我上面效果图实现的不一样,可以参考我下面的代码,我贴出来了。【注:如果你不会React的项目,请把里面涉及到React的代码去掉,用假数据写在标签里就可以了】


html 样式:

<div className="interview_score">
  <div className="circleProgress_wrapper">
    <span className="correct_rate">正确率</span>
    <span className="correct_score">
      <span className="">{this.state.score}</span>
      <span>%</span>
    </span>
    <div className="wrapper left">
      <div className="circleProgress leftcircle" style={scoreProgress_left}></div>
    </div>
    <div className="wrapper right">
      <div className="circleProgress rightcircle" style={scoreProgress_right}></div>
    </div>
  </div>
  <div className="flag_scores">
     {userScore}
    <img src={flag} alt=""/> //flag是分数判断之后文字描述的那个红色的背景图片
  </div>
</div>

css样式:

 .interview_score {
   padding-top: 40px;
   .circleProgress_wrapper {
     width: 180px;
     height: 180px;
     position: relative;
     border: 1px solid #0d546c;
     margin: 0 auto;
     border-radius: 50%;
     .correct_rate {
       position: absolute;
       top: 30px;
       left: 50%;
       transform: translateX(-50%);
       font-size: 18px;
       color: #0d546c;
     }
     .correct_score {
       position: absolute;
       top: 60px;
       left: 50%;
       transform: translateX(-50%);
       font-size: 50px;
       color: #0d546c;
       span:last-of-type {
         margin-left: 3px;
         font-size: 25px;
       }
     }
   }
   .wrapper {
     width: 90px;
     height: 180px;
     position: absolute;
     top: 0;
     overflow: hidden;
   }
   .right {
     right: 0;
   }
   .left {
     left: 0;
   }
   .circleProgress {
     width: 170px;
     height: 170px;
     box-sizing: content-box;
     border: 5px solid transparent;
     border-radius: 50%;
     position: absolute;
     top: 0;
     transform: rotate(-135deg);
   }
   .rightcircle {
     transition: transform 1s;
     transition-delay: 1s;
     border-top: 5px solid #0d546c;
     border-right: 5px solid #0d546c;
     right: 0;
   }
   .leftcircle {
     transition: transform 1s;
     border-bottom: 5px solid #0d546c;
     border-left: 5px solid #0d546c;
     left: 0;
   }
   .flag_scores {
     text-align: center;
     top: -20px;
     position: relative;
     span {
       position: absolute;
       width: 140px;
       height: 30px;
       line-height: 30px;
       text-align: center;
       left: 50%;
       top: 50%;
       margin-left: -67px;
       margin-top: -17px;
       color: #fff;
     }
     img {
       width: 210px;
       display: block;
       margin: 0 auto;
     }
   }
 }

js 逻辑:

上面的html和css代码可以实现一个circle圆形滑动的效果了,下面就是根据不同的分数实现不同的百分比显示不同的circle圆形加载了。

// 构造函数里初始数据设置score为0分:
this.state = {
  score: 0
}

// 页面初始化加载的时候,去获取你当前的score是多少,就显示多少:
componDidMount() {
  this.setState = ({
    score: this.props.score
  })
}

// 这里显示不同的score,红色背景flag里面显示不同的文字。
let userScore, scoreProgress_left, scoreProgress_right
if (this.state.score < 70) {
  userScore = (
    <span> 还需要继续加油哦~</span>
  )
} else if (this.state.score >= 70 && this.state.score <= 90) {
  userScore = (
    <span> 不错,再加把劲~</span>
  )
} else {
  userScore = (
    <span> 真棒!</span>
  )
}

`将长方形内部的半圆向右(顺时针)旋转45度,就可以得到进度覆盖整个背景的图像。
将半圆向左(逆时针)旋转135度就能得到只有进度条背景的图像。
为什么又要向左旋转,而不是一直向右旋转,
当然是因为要实现的效果是:进度是从顶部开始,顺时走完的`
if (this.state.score >= 0 && this.state.score <= 50) {
  const rotate = -135 + 18 / 5 * this.state.score
  scoreProgress_left = {
    transform: `rotate(${rotate}deg)`
  }
  scoreProgress_right = {
    transform: `rotate(-135deg)`
  }
} else {
  const rotate = -135 + 18 / 5 * (this.state.score - 50)
  scoreProgress_left = {
    transform: `rotate(45deg)`
  }
  scoreProgress_right = {
    transform: `rotate(${rotate}deg)`
  }
}

基本上上面的逻辑和操作就可以实现circle圆环进度条加载的效果了 ~

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

React + css3 实现circle圆环进度条加载 的相关文章

  • 如何更改 Material UI 版本 5 自动完成中的选项字体大小?

    我想更改下拉项目的字体大小 我尝试了不同的方法来改变字体大小 如下所示 如何更改 Material UI 自动完成字体大小 https stackoverflow com questions 62492939 how do i change
  • 为什么inline-block元素出现在inline元素的下方?如何让它们出现在同一行?

    我目前正在尝试理解基本的 HTML 和 CSS 概念 并遇到了一个非常奇怪的问题 我有两个元素 一个具有 display inline 另一个具有 display inline block 我正在尝试创建一个列表 类似的东西1 SOME C
  • 如何隐藏其他选项卡的内容并仅显示所选选项卡的内容

    当我单击特定选项卡时 其他选项卡的内容应该隐藏 但它并没有隐藏 这是我所有的代码 function showStuff id if document getElementById id style display block documen
  • jquery覆盖加载栏div

    所以我有一个数据表 并且我正在使用 ajax 获取数据 当检索数据时 表中的数据消失并出现一个小的加载圆圈 我希望数据保留 我知道如何做到这一点 并且加载圆圈出现在表格的中心 不一定是垂直的 至少是水平的 以及稍微透明的背景阻挡稍微超出表格
  • 单击按钮重复动画

    我想每次单击按钮时都重复动画 我尝试做某事像这样 https jsfiddle net 91raod7e const dist document querySelector dist document querySelector butto
  • 在导航栏下方添加背景图片

    我想在导航栏下方添加背景图像 具有完整窗口大小的宽度 它不应覆盖整个页面长度 而是从导航栏菜单下方开始 一直向下直到特定的指定高度 但宽度是满的 我参考了以下内容 但仍然没有结果 在 Twitter Bootstrap 中的导航栏下方启动背
  • 删除

    好的 我有一个小菜单栏 菜单内的三个元素还有更多的子菜单 但是菜单栏中的元素之间有不必要的间距 而且我创建的子菜单有不必要的背景宽度 我在代码中将其涂成白色以使读者理解 由于这种不必要的宽度 即使鼠标悬停在不可见的宽度上 在本例中为白色 本
  • 将 Div 放置在另一个 DIV 下方

    我有两个 DIV 元素 其中之一具有绝对位置 主 DIV 的左下角 第二个 DIV 是隐藏的 只有单击链接才能显示 我需要第二个出现在第一个下方 但由于第一个 div 的位置是绝对的 第二个 div 出现在第一个 div 之上 HTML 代
  • 可以将position:absolute元素设为粘性吗?

    In CSS position sticky使元素能够显示position static行为 即 它采用文档流中的默认位置 直到到达某个滚动位置 然后采用position fixed行为 那么 这是否意味着我们不能使用position st
  • html 电子邮件内的背景图像 css - Gmail 不支持

    我想向我的用户发送如下所示的带有背景图像 css 的 html 正文电子邮件 div style width 500px height 1000px background color black background image none
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 固定 div 位于居中 div 旁边

    我有一个网页 其中有可滚动的内容 此内容包含在 content 内 位于页面的中心 现在我希望导航栏出现在内容左侧 50 像素处 该栏应具有固定位置 不应滚动 这是我到目前为止所尝试过的 nav position fixed top 50
  • 如何在Yii框架中向Form添加类?

    我在 Yii 中有一个表单 我想向该表单添加一个类
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • css3按钮背景颜色无限过渡

    有没有办法仅使用 css3 使按钮的背景颜色从灰色渐变为蓝色 然后又回到灰色 一个很好的例子是默认操作按钮是可可 我知道这可以在 javascript 中完成 但我宁愿只使用 css 来完成此操作 您好 我已经通过 CSS3 动画制作了按钮

随机推荐

  • UID卡_ID卡

    1 基本信息 M1卡 全称Mifare classic 1K 普通IC卡 0扇区不可修改 其他扇区可以反复擦写 通常我们使用的门禁卡 电梯卡都是M1卡 M1卡是NXP 恩智浦半导体 公司研发的IC卡 执行标准是ISO IEC14443 Ty
  • 微信表情的字符编号完整版【图文并茂哦!】

    图文并茂哦 Emoji表情的分类 微信表情的字符编号完整版 NLP神经网络实现在伪原创方面的运用NLP伪原创技术早期并不是很受欢迎基于主动学习的伪原创句法识别研究小发猫 人工智能的伪原创工具小发猫与普通伪原创工具的区别自媒体如何快速伪原创
  • SVN——Previous operation has not finished;run 'cleanup' if it was interupted

    前言 小编在用svn更新代码更新的时候不小心关掉了客户端 导致出现如下问题 解决方案 客户端已经给出了解决模块 按照客户端的提示去做就好了 不过还是要查一下相关的内容 以免误操作造成更多不好的结果 按照如下图所示去操作就好 打开后是这个界面
  • css背景对话框

    ts height 108rpx width 528rpx background RGBA 46 48 61 1 border radius 8rpx position absolute top 50rpx left 54rpx after
  • iOS 15适配

    写的有点晚了哈 升级iOS15之后 有没有发现你的App导航栏上的状态栏颜色变了呢 navigationBar if available iOS 15 0 UINavigationBarAppearance appearance UINav
  • [Angular]快速将Bootstrap4引入Angular9

    目录 创建一个Angular项目 Angular里面引入bootstrap 方法一 直接引用 方法二 npm安装 Angular添加表单 优化 参考链接 创建一个Angular项目 安装Node js 安装Angular CLI 使用命令行
  • unity 智能巡逻兵

    unity 智能巡逻兵 一 游戏要求 游戏设计要求 创建一个地图和若干巡逻兵 使用动画 每个巡逻兵走一个3 5个边的凸多边型 位置数据是相对地址 即每次确定下一个目标位置 用自己当前位置为原点计算 巡逻兵碰撞到障碍物 则会自动选下一个点为目
  • 关于Spring属性编辑器详解

    最近刚在研究Spring的编辑器 发现很有意思 刚好galaxystar起了一个这样贴 我想对PropertyEditor作一个详细的整理会对大家有益 特定启了这个新帖 所谓的PropertyEditor 顾名思义 就是属性编辑器 由于Be
  • Nginx配置汇总

    一 Nginx概念 Nginx是目前负载均衡技术中的主流方案 几乎绝大部分项目都会使用它 Nginx是一个轻量级的高性能HTTP反向代理服务器 同时它也是一个通用类型的代理服务器 支持绝大部分协议 如TCP UDP SMTP HTTPS等
  • hadoop.2.6.0安装hive.1.2.2

    文章目录 1 hadoop 2 6 0的安装 2 hive 1 2 2的安装 2 1 前提 2 2 解压 错误1 提示 1 hadoop 2 6 0的安装 参考 https blog csdn net qq 21383435 article
  • 请别再问我Spark的MLlib和ML库的区别

    机器学习库 MLlib 指南 MLlib是Spark的机器学习 ML 库 其目标是使实际的机器学习可扩展和容易 在高层次上 它提供了如下工具 ML算法 通用学习算法 如分类 回归 聚类和协同过滤 特征提取 特征提取 转换 降维和选择 管道
  • sharding-jdbc系列(一):概念

    前话 前段时间公司项目比较忙 天天都忙于码代码 最近好不容易项目上线了 后期就是试运行解决线上问题 要闲一些了 看了下公司以前的一些项目 发现其中居然有用到sharding jdbc 想到以前自己也使用过 但是仅仅是会用过 对一些原理还不了
  • antd pro component - EditableProTable 表单重置

    antd pro component EditableProTable 受控情况之下 改变 dataSource之后 但是表格编辑组件还是记录上次编辑状态记录的数据 没有及时更新 解决办法就是手动更新表单 其实整个表格就是一个form 开始
  • 数据分析36计(24):因果推断结合机器学习估计个体处理效应

    个体异质性为何重要 传统的因果推断分析 主要关注焦点是平均处理效应 Average Treatment Effect 许多科学和工程都会面临这样的挑战 从个性化的医疗救治方案 到定制型的营销建议都需要了解异质性处理效应 即个体层面的因果效应
  • 延时队列的几种实现方式(只有原理,并没有源码)

    延时队列 需求描述 场景一 在淘宝下了订单 过半个小时未支付就取消订单 场景二 还是淘宝 别问 问就是淘宝资深剁手党 发货后超过15天未确认就自动收货 需求分析 本质上都是超过xxx时间 就异步去做一件事 说到异步那基本上就是搞个定时任务去
  • 推荐 4 个本周 火火火火 的开源项目

    本期推荐开源项目目录 1 一个集成了主流 AI 大模型的 APP 2 模拟人类行为的小镇 3 离线 OCR 软件 4 流程图编辑框架 01 一个集成了主流 AI 大模型的 APP 该开源项目集成了主流的大语言模型 绘图模型 基于Flutte
  • 第七站:吃透JavaScript中的函数

    欢迎来到 JavaWeb的奇妙冒险 教学系列 在这里 我们将继续探索Web开发的精彩世界 本站将为你揭开JavaScript中变量的神秘面纱 让我们在学习的过程中既轻松愉快 又能掌握高质量的知识 准备好进入第七站的学习之旅了吗 让我们开始吧
  • 【C++11】右值引用和移动语义 万能引用和完美转发

    文章目录 1 右值引用和移动语义 1 1 左值引用和右值引用 1 2 右值引用的使用场景 1 3 新的类功能 2 万能引用与完美转发 2 1 万能引用的基本介绍和使用 2 2 完美转发 2 3 完美转发的实际应用场景 3 可变参数模板 3
  • C++继承(一)

    目录 继承方式 继承同名成员处理方式 父类与子类中都有相同的成员 继承同名静态成员处理方式 继承中的对象模型 继承中构造和析构函数 菱形继承 多继承语法 在多种接口需要相同输出时 C 的继承相对于传统方式更有利也更方便维护 C 继承语法 c
  • React + css3 实现circle圆环进度条加载

    需求效果图 如上图所示 需求 动态获取不同的分数 圆环展示对应的百分比分数值 正确率 70 以下提示文案 还需要继续加油哦 正确率 70 90 以下提示文案 不错 再加把劲 正确率 90 及以上提示文案 真棒 数据描述 不同的测试分数显示不