HTML 如何实现一个带间隙的圆环

实际效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5e634cedded9424d96fbe6d46f34f61a.png#pic_center在这里插入图片描述

代码实现:
HTML部分:

<svg width="500" height="500" viewBox="0 0 100 100"><!-- 各参数详解 --><!-- stroke:圆环(轮廓)填充色 --><!-- stroke-width: 圆环(圆的轮廓)的宽度 --><!-- stroke-dasharray: 设置轮廓的间隙,会按照轮廓颜色-空白-轮廓颜色-空白...这样的规律去无限渲染 --><!-- r:圆环的半径,该半径的计算为两个圆的中心点。例如:圆环的宽度为10 组成圆环的两个圆半径分别为10,20,则r应该设为15 --><!-- fill:圆的内部填充色,我们想实现圆环效果,就需要设置其为transparent让其显示背景色,这样圆只显示轮廓,即圆环 --><!-- cx,cy:圆心点的坐标 --><!-- transform:平移、旋转、缩放圆环 --><!-- 最下层的圆 蓝色区域 --><circleid="circle1"cx="50"cy="50"r="31"stroke="blue"stroke-width="5"fill="transparent"stroke-dasharray="100,0"transform="rotate(-94 50 50)"/><!-- 中间的圆 灰色区域 --><circleid="circle2"cx="50"cy="50"r="31"stroke="gray"stroke-width="5"fill="transparent"stroke-dasharray="0,100"transform="rotate(-94 50 50)"/><!-- 顶部圆环 设置间隙 颜色设为白色(背景色) --><!-- stroke-width属性设置的比前两个圆稍微大一些,否则圆的轮廓会出现两条圆环的线 --><circleid="circle3"cx="50"cy="50"r="31"stroke="white"stroke-width="6"fill="transparent"stroke-dasharray="0,100"transform="rotate(-94 50 50)"/>
</svg>

JS部分

  // 在线数量onlineCount = 3;// 离线数量offlineCount = 4;
    const circle1 = document.getElementById('circle1');const circle2 = document.getElementById('circle2');const circle3 = document.getElementById('circle3');circle1?.setAttribute('stroke-dasharray', this.getCircle(1));circle2?.setAttribute('stroke-dasharray', this.getCircle(2));circle3?.setAttribute('stroke-dasharray', this.getCircle(3));
// 此函数主要为计算三个圆环的占比// 需要先计算出圆环的周长,再根据周长分配各部分的长度,例如:此处三个圆环半径为31,则周长为31*3.14*2=194.68,约等于195// 第一个圆环渲染蓝色区域,计算出蓝色区域与空白区域// 第二个圆环渲染灰色区域,由于渲染的起始位置相同,所以计算时先渲染一段0长度的实际区域,再渲染一段蓝色区域长度的空白区域,显示第一个圆环的蓝色区域,然后再渲染灰色区域// 第三个圆环则添加圆环中的间隙(此函数设置为2,可根据实际需求更改)getCircle(index: any) {switch (index) {case 1:if (this.onlineCount === 0) {if (this.offlineCount === 0) {return '195,0';} else {return '0,195';}} else if (this.offlineCount === 0) {return `195,0`;} else {const length =(195 / (this.onlineCount + this.offlineCount)) * this.onlineCount;return `${length},${195 - length}`;}case 2:if (this.onlineCount === 0) {if (this.offlineCount === 0) {return '0,195';} else {return '195,0';}} else if (this.offlineCount === 0) {return '0,195';} else {const length =(195 / (this.onlineCount + this.offlineCount)) * this.offlineCount;// 先绘制0长度的实际灰色区域,再绘制空白区域(用于显示第一个圆环的蓝色),再绘制灰色区域return `0,${195 - length},${length}`;}case 3:if (this.onlineCount === 0) {if (this.offlineCount === 0) {return '0,195';} else {const length = 195 / this.offlineCount - 2;return `2,${length}`;}} else if (this.offlineCount === 0) {const length = 195 / this.onlineCount - 2;return `2,${length}`;} else {const length = 195 / (this.onlineCount + this.offlineCount) - 2;return `2,${length}`;}default:return '';}}

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

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

相关文章

《精准表达》让你的方案在最短的时间内打动人心 - 三余书屋 3ysw.net

精准表达&#xff1a;让你的方案在最短的时间内打动人心 大家好&#xff0c;今天我们要解读的书名为《精准表达》&#xff0c;其副标题是“让你的方案在最短的时间内打动人心”。在工作中&#xff0c;人们经常需要提交各种方案&#xff0c;例如销售人员向大客户介绍公司产品时…

idea显示maven或者gradle无法从仓库获取到项目中的jar包,jar包所在仓库无法访问解决方法,百试百灵

**idea显示maven或者gradle无法从仓库获取到项目中的jar包&#xff0c;jar包所在仓库无法访问解决方法&#xff0c;百试百灵** 直接上图&#xff0c;大概的故障问题就是&#xff1a;idea导入新的项目&#xff0c;因为项目中很多的jar需要从远程仓库下载&#xff0c;但是远程仓库…

Excel操作-vlookup函数用法大全

目录 常规查找 ​编辑​编辑多条件查找 一维表的多条件查找 二维表的多条件查找 反向查找&#xff08;从右到左&#xff09; ​编辑 匹配多列数据 法一&#xff1a; 法二&#xff1a; 模糊匹配 按指定次数重复 在合并单元格中查找 法一&#xff1a; 法二&#xff1…

Pyside6:Spacer的使用,布局中控件顶格添加

在普通的布局&#xff0c;如水平或纵向布局中&#xff0c;我们的控件都会保持中间状态&#xff0c;如下&#xff1a; 但有许多情况下 &#xff0c;我们需要将控件布局为如下界面&#xff1a; 在前端开发时&#xff0c;我们很容易通过flex来进行布局&#xff0c;修正它的居中或者…

以赛促学、生态共建 | 软通动力子公司鸿湖万联成功举办基于x86架构的OpenHarmony应用生态挑战赛

近日&#xff0c;由开放原子开源基金会、央视网、江苏省工业和信息化厅、无锡市人民政府、江苏软件产业人才发展基金会、苏州工业园区、无锡高新区等共同承办&#xff0c;鸿湖万联参与共建的“基于x86架构的OpenHarmony应用生态挑战赛”决赛路演在无锡圆满落幕。本次挑战赛历时…

倾斜摄影三维模型数据在立体裁剪应用分析

倾斜摄影三维模型数据在立体裁剪应用分析 立体裁剪是一种将三维模型应用于摄影中的技术&#xff0c;可以在摄影过程中将虚拟的三维模型与现实场景进行合成&#xff0c;从而实现逼真的视觉效果。倾斜摄影是一种通过无人机或其他飞行器进行航拍的技术&#xff0c;可以获取到大范围…

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码&#xff0c;这是其它项目的包的导入路径是不用于当前项目的&#xff0c;这样导致项目无法正常起来&#xff0c;但是我们又不可能一个个文件去处理&#xff0c;这时可以用下面的方式解决 pycharm直接设置 …

安全中级-初开始

一、网络基础 重要点&#xff1a;TTL值&#xff08;防环&#xff0c;linux64.Windows128 &#xff09;&#xff0c;IP数据包包头格式字节&#xff08;20&#xff09; 标识标志偏移量起到什么作用&#xff08;数据超过1500会分片&#xff09; wireshack抓包会有一个MSS&#x…

Vivado中的加法器电路结构

先给出结论&#xff0c;Vivado中的加法器是利用SLICE中的LUT和进位链实现的。 目录 一、全加器二、SLICE如何实现加法器三、实例测试1.直接使用加法器2.LUT级别 一、全加器 一位全加器的结构如下&#xff1a; 其中&#xff1a; A、B为输入的两个加数CI为进位CO为本位对高位的…

连接器电镀小课堂系列三 | 打底电镀、基体金属、润滑、电压

【摘要/前言】 电镀会影响连接器系统的寿命和质量&#xff0c;包括耐腐蚀性、导电性、可焊性&#xff0c;当然还有成本。 【小课堂背景】 这是 Samtec质量工程经理 Phil Eckert 和首席工程师 Matt Brown 讨论连接器电镀相关问题的系列第三部分&#xff0c;主题为 “打底电镀、…

C语言 | Leetcode C语言题解之第40题组合总和II

题目&#xff1a; 题解&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, sequence, sizeof(int…

通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验

通义灵码自成功入职阿里云后&#xff0c;其智能编程助手的角色除了服务于阿里云内部几万开发者&#xff0c;如今进一步服务函数计算 FC 产品开发者。近日&#xff0c;通义灵码正式进驻函数计算 FC WebIDE&#xff0c;让使用函数计算产品的开发者在其熟悉的云端集成开发环境中&a…

ARTS Week 24

Algorithm 本周的算法题为 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; img 输入&#xff1a;list1 [1,2,4], list2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 实现代码如下&…

springcloudgateway集成knife4j

上篇我们聊聊springboot是怎么继承knife4j的。springboot3 集成knife4j-CSDN博客 本次我们一起学习springcloudgateway集成knife4j。 环境介绍 java&#xff1a;17 SpringBoot&#xff1a;3.2.0 SpringCloud&#xff1a;2023.0.0 knife4j &#xff1a; 4.4.0 引入maven配置…

近年数一,数二难度如何,听说24是像张宇那样的题?

直接上分数&#xff01; “估分一百零几&#xff0c;平时李林130-140&#xff0c;张八110-125的样子&#xff0c;超越做的分数也是100出头。” 24学长说&#xff1a; “远离李林张八&#xff01;张四没做不评价。” “李林张八暑假前做完当作打基础即可。超越才是真题难度”…

打开新世界大门!淘宝商品关键词搜索电商API接口解密

淘宝商城作为全球最大的电子商务平台之一&#xff0c;为数以亿计的消费者提供了广泛的商品选择和购物体验。然而&#xff0c;对于开发者来说&#xff0c;如何利用淘宝平台的资源进行开发和推广是一个关键的问题。幸运的是&#xff0c;联讯数据淘宝电商API的出现为开发者打开了通…

X-Spider媒体下载工具

软件介绍 X-Spider 是一个功能丰富的推特媒体下载器&#xff0c;它不仅可以帮助用户从推特上下载图片和视频&#xff0c;还提供了一些高级的过滤功能。例如&#xff0c;用户可以通过指定日期范围来筛选需要下载的媒体文件&#xff0c;并且可以跳过已下载的重复文件&#xff0c…

【Linux】文件描述符——万字详解

目录 前言 预备知识 复习C语言的文件接口 写方式打开文件 追加方式打开文件 读方式打开文件 系统的文件接口 open close write read 文件描述符 0 & 1 & 2 理解文件描述符 文件描述符的分配规则 重定向的本质 dup2 理解Linux下一切皆文件 缓冲区…

STM32F4 Hal库中IO外部中断(EXIT)的应用

目录 概述 1 中断和事件 1.1 外部中断/事件控制器 (EXTI) 1.2 EXTI主要特性 1.3 中断和事件的差别 1.3.1 中断产生流程 1.3.2 事件产生流程 1.3.3 STM32F4的事件 2 STM32Cube配置工程 2.1 外部中断/事件介绍 2.2 配置参数 2.3 生成Project 3 STM32F4 Hal库中外部中…

在使用电脑时遇过msvcr120.dll文件丢失的情况怎么办,一键修复dll文件丢失

在使用电脑时有没有遇到过msvcr120.dll文件丢失的情况&#xff0c;遇到这样的情况有什么办法可以解决&#xff0c;废话少说&#xff0c;直接上教程&#xff0c;解决msvcr120.dll文件丢失问题。 msvcr120.dll文件丢失修复方法 A. 从官方或其他可信赖的来源下载并安装缺失的 msv…