【vue2+css】实现球内波浪百分比效果

halo,小伙伴们,今天笔者分享一个关于css实现球内(圆形)波浪进度百分比效果,如下图所示:
在这里插入图片描述
话不多说上代码,首先是html代码:


          <div class="card1-left-bottom">
            <div class="card1-left-bottom-left">
              <div class="shop_wrap shop_wrap1">
                <div class="TheCircle">
                  <div class="Water">
                    <span class="CenteredText">{{ statisticalAnalysis.useDeviceRatio }}%</span>
                  </div>
                </div>
              </div>
              <div class="card1-left-bottom-title">在线率</div>
            </div>
            <div class="card1-left-bottom-right">
              <div class="shop_wrap shop_wrap2">
                <div class="TheCircle">
                  <div class="Water">
                    <span class="CenteredText">{{ statisticalAnalysis.repairDeviceRatio }}%</span>
                  </div>
                </div>
              </div>
              <div class="card1-left-bottom-title">故障率</div>
            </div>
          </div>

css代码:


        .card1-left-bottom{
          position: relative;
          overflow: auto;
          margin-top: 28px;

          .card1-left-bottom-right{
            width: 50%;
            float: left;
          }
          .card1-left-bottom-left{
            width: 50%;
            float: left;

          }
          .card1-left-bottom-title{
            width: 118px;
            text-align: center;
            font-size: 14px;
            margin-top: 8px;
          }

          .shop_wrap {
            width: max-content;
            padding: 3px; /* 设置外层容器的内边距 */
            background: linear-gradient(360deg, #0055ff 0%, #33eeff);
            border-radius: 50%;

            .TheCircle {
              position: relative;
              width: 106px; /* 设置圆形容器的宽度 */
              height: 106px; /* 设置圆形容器的高度 */
              //padding: 2px;
              box-sizing: border-box;
              border-radius: 50%; /* 圆形容器的圆角半径 */
              border: 2px solid #fff; /* 圆形容器的边框样式 */
              //background: linear-gradient(360deg, #0055ff 0%, #33eeff) 1.68 1.68;
              box-shadow: 0 0 0 1px #fff; /* 圆形容器的阴影样式 */
              //box-shadow: 0 0 0 1px linear-gradient(0deg, #025bff 0%, #2ec8ff 50%) 1.12 1.12; /* 圆形容器的阴影样式 */
              overflow: hidden; /* 确保容器裁剪水波纹效果 */
              cursor: pointer; /* 鼠标悬停时显示手型光标 */
            }

            .Water {
              position: absolute;
              top: 0;
              left: 0;
              width: 100%;
              height: 100%;
              //background-color: #38b973; /* 水波纹的颜色 */
              background: linear-gradient(360deg,#0055ff 0%, #33d6ff 100%, #33d6ff 91%);
              border-radius: 50%;
              overflow: hidden;
              z-index: 1; /* 确保水波纹在文字之上 */
            }

            .CenteredText {
              position: absolute;
              top: 20%;
              left: 50%;
              transform: translate(-50%, -50%); /* 居中显示文字 */
              color: #333; /* 文字颜色 */
              z-index: 2; /* 确保文字在水波纹之上 */
              height: 14px;
            }

            .Water::after {
              content: '';
              position: absolute;
              //top: 0;
              top: var(--after-top, 0);
              left: 50%;
              width: 162%;
              height: 162%;
              border-radius: 40%;
              background-color: rgb(255, 255, 255); /* 水波纹内部颜色 */
              animation: real 5s linear infinite; /* 实际水波纹的动画效果 */
            }

            @keyframes real {
              0% {
                /* 初始状态:向上平移50%、左平移65%并旋转0度 */
                transform: translate(-50%, -66%) rotate(0deg);
              }
              100% {
                /* 终止状态:向上平移50%、左平移65%并旋转360度,形成旋转一周的效果 */
                transform: translate(-50%, -66%) rotate(360deg);
              }
            }

            .Water::before {
              content: '';
              position: absolute;
              //top: 0;
              top: var(--before-top, 0); /* 使用 CSS 变量 */
              left: 50%;
              width: 150%;
              height: 150%;
              border-radius: 42%;
              //background-color: rgb(240, 228, 228, 0.2); /* 水波纹外部颜色及透明度 */
              background: linear-gradient(360deg, #a3c0ff 0%, #acecff 100%, #a1ebff 91%);
              opacity: 1;
              animation: virtual 8s linear infinite; /* 虚拟水波纹的动画效果 */
            }

            @keyframes virtual {
              0% {
                /* 初始状态:向上平移50%、左平移60%,不进行缩放,旋转0度 */
                transform: translate(-50%, -60%)  scale(1)  rotate(0deg);
              }

              100% {
                /* 终止状态:向上平移50%、左平移60%,进行1.1倍的缩放,旋转360度,
                形成旋转一周的效果并放大水波纹 */
                transform: translate(-50%, -60%) scale(1) rotate(360deg);

              }
            }
          }
          .shop_wrap2{
            background: linear-gradient(360deg, #f23e4e 1%, #fc6b86 100%);
            .Water{
              background: linear-gradient(360deg,#f23d4c 0%, #ffe0e8 100%, #fd8daa 91%);
              //background: linear-gradient(360deg,#f23d4c 34%, #fbb3c6 100%);
            }

            .Water::before {
              background: linear-gradient(360deg, #ffb4bd 0%, #ffe9ee 100%, #ffd1de 91%);
            }
          }
        }

其中球形是从shop_wrap 类开始的,波浪主要是使用伪类after 和before 来生成的。
接着JavaScript中在获取到数据(百分比的值以后),进行设置伪类的高度来实现波浪的高低


      this.$nextTick(()=>{// 获取 .Water 的引用
        var water1 = document.querySelector('.shop_wrap1 .Water');

        water1.style.setProperty('--after-top', 40-this.statisticalAnalysis.useDeviceRatio+'%');
        water1.style.setProperty('--before-top', 40-this.statisticalAnalysis.useDeviceRatio+'%');


        var water2 = document.querySelector('.shop_wrap2 .Water');

        water2.style.setProperty('--after-top', 40-this.statisticalAnalysis.repairDeviceRatio+'%');
        water2.style.setProperty('--before-top', 40-this.statisticalAnalysis.repairDeviceRatio+'%');
      })

这样就可以实现球形波浪百分比进度了,好了笔者就分享到这了,如果有更好的实现方法请告诉我哦~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL自动发送邮件的方法有哪些?如何配置?

SQL自动发送邮件设置时的注意事项&#xff1f;邮件群发如何操作&#xff1f; 在现代企业中&#xff0c;自动化流程越来越普遍&#xff0c;SQL自动发送邮件作为其中一项重要功能&#xff0c;能够大大提高工作效率并简化数据管理流程。AokSend将介绍几种实现SQL自动发送邮件的方…

SpringBoot整合SpringSecurit(二)通过token进行访问

在文章&#xff1a;SpringBoot整合SpringSecurit&#xff08;一&#xff09;实现ajax的登录、退出、权限校验-CSDN博客 里面&#xff0c;使用的session的方式进行保存用户信息的&#xff0c;这一篇文章就是使用token的方式。 在其上进行的改造&#xff0c;可以先看SpringBoot…

STM32 printf 重定向到CAN

最近在调试一款电机驱动板 使用的是CAN总线而且板子上只有一个CAN 想移植Easylogger到上面试试easylogger的效果&#xff0c;先实现pritnf的重定向功能来打印输出 只需要添加以下代码即可实现 代码 #include <stdarg.h> uint8_t FDCAN_UserTxBuffer[512]; void FDCAN_p…

【Java】解决Java报错:OutOfMemoryError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 内存泄漏2.2 大数据结构2.3 JVM内存参数配置不当 3. 解决方案3.1 内存泄漏检测与修复3.2 优化数据结构3.3 调整JVM内存参数3.4 使用弱引用 4. 预防措施4.1 定期进行内存分析4.2 合理设计数据结构4.3 使用合适的JVM内存参数4.4 优…

前端工程化工具系列(十)—— Browserslist:浏览器兼容性配置工具

Browserslist 是一个能够在不同的前端工具间共享目标浏览器的配置&#xff0c;各工具根据该配置进行代码转译等操作。 具体的这些前端工具为&#xff1a;Autoprefixer、Babel、postcss-preset-env、eslint-plugin-compat、stylelint-no-unsupported-browser-features、postcss-…

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…

批量高效调整图片像素:自定义缩小bmp图片,画质优先,一键实现高效优化

图片已经成为我们生活中不可或缺的一部分。无论是社交媒体分享&#xff0c;还是工作文件传输&#xff0c;图片总是扮演着重要的角色。然而&#xff0c;有时候&#xff0c;我们可能会面临一个问题&#xff1a;图片像素过大&#xff0c;不仅占用过多的存储空间&#xff0c;还可能…

【JavaSE】面向对象---多态

前言 本篇以Java初学者视角写下&#xff0c;难免有不足&#xff0c;或者术语不严谨之处。如有错误&#xff0c;欢迎评论区指正。本篇说明多态相关的知识。若本文无法解决您的问题&#xff0c;可以去最下方的参考文献出&#xff0c;找出想要的答案。 多态概念 多态&#xff08…

如何实现网站HTTPS访问

在当今网络安全至关重要的时代&#xff0c;HTTPS已经成为网站安全的基本标准。HTTPS&#xff08;超文本传输安全协议&#xff09;通过在HTTP协议基础上加入SSL加密层&#xff0c;确保了数据在用户浏览器和服务器之间的传输是加密的&#xff0c;有效防止数据被窃取或篡改&#x…

【学术小白成长之路】01三方演化博弈(基于复制动态方程) -基础概念与模型构建

1.演化博弈基础知识 经典博弈论起源于1944年Von Neumann和Morgenstern合著的《博弈论与经济学行为》&#xff0c;是研究理性决策者之间竞争和合作关系的数学方法。 博弈论主要研究完全理性的博弈个体为实现利益最大化而做的策略选择&#xff0c;在过去几十年取得了极大发展&am…

【JMeter接口测试工具】第二节.JMeter基本功能介绍(下)【入门篇】

文章目录 前言八、Jmeter常用逻辑控制器 8.1 如果&#xff08;if&#xff09;控制器 8.2 循环控制器 8.3 ForEach控制器九、Jmeter关联 9.1 正则表达式提取器 9.2 xpath提取器 9.3 JSON提取器十、跨越线程组传值 10.1 高并发 10.2 高频…

详解 Flink 的时间语义和 watermark

一、Flink 时间语义类型 Event Time&#xff1a;是事件创建的时间。它通常由事件中的时间戳描述&#xff0c;例如采集的日志数据中&#xff0c;每一条日志都会记录自己的生成时间&#xff0c;Flink 通过时间戳分配器访问事件时间戳Ingestion Time &#xff1a;是数据进入 Flink…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构&#xff0c;Master作为中央管控节点&#xff0c;会和每一个Node进行一个连接&#xff1b; 所有UI层&#xff0c;client的操作&#xff0c;只会和Mat…

spark复习

第一章 1.​大数据特点:4V 2.​大数据计算模式 3.​hadoop生态系统 4.​spark提供了内存计算和基于DAG的任务调度机制&#xff0c;遵循一个软件栈满足不同应用场景的理念。 5.​hadoop中MapReduce计算框架的缺点&#xff0c;对应的spark的优点 第二章 1.​spark生态系统 …

shell编程(二)——字符串与数组

本文为shell 编程的第二篇&#xff0c;介绍shell中的字符串和数组相关内容。 一、字符串 shell 字符串可以用单引号 ‘’&#xff0c;也可以用双引号 “”&#xff0c;也可以不用引号。 单引号的特点 单引号里不识别变量单引号里不能出现单独的单引号&#xff08;使用转义符…

[经验] 涠洲岛在广西吗 #职场发展#知识分享#媒体

涠洲岛在广西吗 广西涠洲岛&#xff0c;是中国南海上的一颗闪亮明珠&#xff0c;位于广西北部湾沿海&#xff0c;东经108.71度&#xff0c;北纬21.54度&#xff0c;距离北海市区30公里&#xff0c;是中国最大的海岛之一&#xff0c;风景秀丽&#xff0c;气候温和。岛上山青水秀…

PowerDesigner导入Excel模板生成数据表

PowerDesigner导入Excel模板生成数据表 1.准备好需要导入的Excel表结构数据,模板内容如下图所示 2.打开PowerDesigner,新建一个physical data model文件,填入文件名称,选择数据库类型 3.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口…

Ansys的电磁场分析和系统电路仿真软件Electronics 2024 R1版本在Windows系统的下载与安装配置

目录 前言一、许可管理工具安装二、许可配置三、EM安装四、MCAD和帮助文件安装&#xff08;可选择&#xff0c;非必要&#xff09;总结 前言 “ ANSYS Electromagnetics Suite或ANSYS Electronics Suite是几个功能强大的程序的集合&#xff0c;用于仿真系统的电磁。ANSYS电磁套…

vscode中jupyter notebook执行bash命令,乱码解决方法

问题描述 使用vscode中使用jupyter notebook执行bash命令时,不管是中文还是英文,输出均是乱码 但是使用vscode的terminal执行同样的命令又没有问题,系统自带的cmd也没有问题。 最终解决后的效果如下: ## 问题分析 默认vscode会选择使用cmd执行shell, 但是通过vscode的设…

docker部署使用本地文件的fastapi项目

项目背景&#xff1a;项目使用python开发&#xff0c;需要使用ubutun系统部署后端api接口&#xff0c;对外使用8901端口。 1:项目结构&#xff1a; 2&#xff1a;项目需要使用的pyhton版本为3.9&#xff0c;dockerfile内容如下&#xff1a; # FROM python:3.9# WORKDIR /co…