H5 Svg 半圆圆环占比图

news2024/9/23 9:21:18

效果图
在这里插入图片描述
主逻辑

/* 虚线长度 */
stroke-dasharray  
/* 偏移 */
stroke-dashoffset 

代码

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./assets/global.css">

    <style>
        .circle-progress-bar {
            --width: 300px;
            --stroke-width: 12px;
            --height: calc((var(--width) + var(--stroke-width)) / 2);
            width: var(--width);
            height: var(--height);

            overflow: hidden;
            position: relative;
        }

        .circle-progress-bar .circle-progress-text {
            font-size: 30px;
            position: absolute;
            bottom: 0px;
            width: 100%;
            left: 50%;
            transform: translateX(-50%);
            text-align: center;
        }

        .circle-progress-bar .circle-progress-svg {
            width: var(--width);
            height: var(--width);
            transform: rotate(180deg);
        }

        .circle-progress-bar .circle-progress-circle {
            /* 周长 */
            stroke-dasharray: 628;
            /* 偏移 */
            stroke-dashoffset: 333;
        }
    </style>
</head>

<body>
    <div class="circle-progress-bar">
        <svg class="circle-progress-svg">
            <circle class="circle-progress-circle-back" stroke-linecap="round" cx="150" cy="150" r="144"
                fill="transparent" stroke-width="12" stroke="grey" />
            <circle class="circle-progress-circle" stroke-linecap="round" cx="150" cy="150" r="144" fill="transparent"
                stroke-width="12" stroke="grey" />
        </svg>
        <div class="circle-progress-text">60%</div>
    </div>

    <script type="module">
        let circleProgressBarDom = document.querySelector('.circle-progress-bar')               // 整体的容器
        let circleProgressCircleDom = document.querySelector('.circle-progress-circle')         // 前面弧线DOM
        let circleProgressCircleBackDom = document.querySelector('.circle-progress-circle-back')// 后面弧线DOM
        let circleProgressTextDom = document.querySelector('.circle-progress-text')             // 文字DOM
        let width = 200;                            // 盒子宽度
        let strokeWidth = 20                        // 线宽
        let r = width / 2 - strokeWidth / 2         // 半径
        let perimeter = (r * 2 * Math.PI).toFixed(0)// 周长
        let ratio = .66;                            // 占比 小数
        let backgroundColor = 'rgb(168, 168, 168)'  // 后面弧线的颜色
        let color = 'rgb(255, 181, 54)'             // 前面弧线的颜色

        // 设置宽度、线宽
        circleProgressBarDom.setAttribute('style', `--width: ${width}px; --stroke-width: ${strokeWidth}px`)
        // 设置中心点、半径、线宽、占比、颜色
        circleProgressCircleBackDom.setAttribute('cx', width / 2)
        circleProgressCircleBackDom.setAttribute('cy', width / 2)
        circleProgressCircleBackDom.setAttribute('r', r)
        circleProgressCircleBackDom.setAttribute('stroke-width', strokeWidth)
        circleProgressCircleBackDom.setAttribute('style', `stroke-dasharray: ${perimeter};stroke-dashoffset: ${perimeter / 2 * 0 + perimeter / 2}`)
        circleProgressCircleBackDom.setAttribute('stroke', backgroundColor)
        // 设置中心点、半径、线宽、占比、颜色
        circleProgressCircleDom.setAttribute('cx', width / 2)
        circleProgressCircleDom.setAttribute('cy', width / 2)
        circleProgressCircleDom.setAttribute('r', r)
        circleProgressCircleDom.setAttribute('stroke-width', strokeWidth)
        circleProgressCircleDom.setAttribute('style', `stroke-dasharray: ${perimeter};stroke-dashoffset: ${perimeter / 2 * (1 - ratio) + perimeter / 2}`)
        circleProgressCircleDom.setAttribute('stroke', color)
        // 设置文字
        circleProgressTextDom.textContent = ratio * 100 + '%'

    </script>

</body>

</html>

在线预览
https://linyisonger.github.io/H5.Examples/
源码仓库
https://github.com/linyisonger/H5.Examples.git

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

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

相关文章

sentinel网关限流配置及使用

sentinel控制台源码&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…

socket功能定义和一般模型

1. socket的功能定义 socket是为了使两个应用程序间进行数据交换而存在的一种技术&#xff0c;不仅可以使同一个主机上两个应用程序间可以交换数据&#xff0c;而且可以使网络上的不同主机间上的应用程序间进行通信。 2. 图解socket的服务端/客户端模型

MySQL面试篇章——MySQL基础复习

文章目录 MySQL基本介绍MySQL数据类型数值类型字符串类型日期和时间类型ENUM和SET MySQL运算符算数运算符逻辑运算符比较运算符 MySQL常用函数字符串函数数值函数时间和日期函数聚合函数 MySQL完整性约束范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#…

<数据集>钢铁缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1800张 标注数量(xml文件个数)&#xff1a;1800 标注数量(txt文件个数)&#xff1a;1800 标注类别数&#xff1a;6 标注类别名称&#xff1a;[crazing, patches, inclusion, pitted_surface, rolled-in_scale, scr…

【C语言】详解结构体(上)

文章目录 前言1. 结构体类型的含义2.结构体的声明2.1 结构体声明的语法2.2 结构体变量的创建和初始化 3.结构体的特殊声明4. 结构体的自引用5.小结 前言 C语言的数据类型分为内置数据类型和自定义的数据类型。所谓的内置的数据类型可以认为是C语言自带的数据类型&#xff08;c…

three完全开源扩展案例03-模型加载

https://www.threelab.cn/three-cesium-examples/public/index.html#/codeMirror?navigationThree.js%E6%A1%88%E4%BE%8B[r166]&classifybasic&idmodelLoad 更多内容&#xff1a;https://threelab.cn/ import * as THREE from three import { OrbitControls } from …

AI+折叠屏,荣耀的创新周期论

文&#xff5c;刘俊宏 编&#xff5c;王一粟 2024年&#xff0c;AI和折叠屏的演进路线&#xff0c;已经成为了手机行业的共识。 首先&#xff0c;手机市场的新增量已经被折叠屏所接管。据Counterpoint Research数据显示&#xff0c;中国2024年第一季度折叠屏手机销量同比增长…

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架&#xff0c;支持多种编程语言&#xff0c;最常用的是C。Qt6带来了许多改进和新功能&#xff0c;包括对C17的支持、增强的QML和UI技术、新的图形架构&#xff0c;以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…

linux后门教程

linux后门教程 alias 用法 系统默认别名&#xff1a;alias 设置别名&#xff1a;alias lsls -laih 删除别名&#xff1a;unalias ls **加参数&#xff1a;**alias ls‘ls -laih;pwd’ 注意 系统启动默认加载的配置文件 /etc/profile 切换用户就会执行/etc/profile /etc/bash…

【JavaScript 算法】冒泡排序:简单有效的排序方法

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 冒泡排序&#xff08;Bubble Sort&#xff09;是一种基础的排序算法&#xff0c;通过重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它…

c语言题目之打印水仙花数

文章目录 一、题目二、思路三、代码实现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 二、思路 此题的关键在于只要知道判断一个数据是否为水仙花数的方式&#xff0c;问题就迎刃而解。假定给定一个数据data&#xff0c;具体检测方式如下&a…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现

本次文章更新内容&#xff0c;图片以及扫描的PDF也可以支持批量提取指定区域内容了&#xff0c;主要是通过截图指定区域&#xff0c;然后使用OCR来识别该区域的文字来实现的&#xff0c;所以精度可能会有点不够&#xff0c;但是如果是数字的话&#xff0c;问题不大&#xff1b;…

【MobileNet】【模型学习】

MobileNet 模型学习 MobileNet v1 B站视频链接&#xff1a;https://www.bilibili.com/video/BV1i44y1x7hP/关键点&#xff1a; 将常规的卷积&#xff0c;替换成深度可分离卷积。具体为&#xff1a;逐层卷积、逐点卷积。使用 Relu6 替换原先的 Relu。防止在进行 int8 和 float…

LAST_INSERT_ID使用方法-(DM8达梦数据库)

LAST_INSERT_ID使用方法 - DM8达梦数据库 1 示例 11.1 创建表1.2 结果集 2 示例 22.1 创建表2.2 结果集 3 达梦数据库学习使用列表 1 示例 1 1.1 创建表 DROP TABLE AT240715; CREATE TABLE "SYSDBA"."AT240715" ( "ID" INT PRIMARY KEY AUTO_…

leetcode 周赛(406)全AC留念

纪念第一次 leetcode 周赛&#xff08;406&#xff09;全AC 1.(100352. 交换后字典序最小的字符串) 题目描述&#xff1a; 给你一个仅由数字组成的字符串 s&#xff0c;在最多交换一次 相邻 且具有相同 奇偶性 的数字后&#xff0c;返回可以得到的 字典序最小的字符串 。 如…

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

基于mcu固件反汇编逆向入门示例-stm32c8t6平台 本文目标&#xff1a;基于mcu固件反汇编逆向入门示例-stm32c8t6平台 按照本文的描述&#xff0c;应该可以在对应的硬件上通实验并举一反三。 先决条件&#xff1a;拥有C语言基础&#xff0c;集成的开发环境&#xff0c;比如&am…

卫星降雨量数据下载及生成栅格分布图(CMORPH)

一、 降雨 nc 数据下载 1. 登录网址&#xff08;截至到20240712仅有2024年1月的降雨量&#xff09;https://www.ncei.noaa.gov/products/climate-data-records/precipitation-cmorph 2. 选择对应时间分辨率 8km8km (30 min), 0.250.25 (hourly, daily)&#xff08;覆盖全球60…

ZStack Cloud 5.1.8正式发布

2024年7月5日&#xff0c;ZStack Cloud正式发布最新版本——ZStack Cloud 5.1.8&#xff0c;涵盖一系列重要功能&#xff0c;以下为您进行详细介绍。 亮点速览 GPU运维管理增强&#xff1a;新增GPU设备统一管理界面&#xff1b;支持GPU工作状态和实时负载监控报警三层网络运维…

校园工会体育报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;赛事公告管理&#xff0c;球员管理&#xff0c;球队信息管理&#xff0c;比赛信息&#xff0c;比赛报名管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;比赛信息&#xff0c;比赛报名&#…