弧形进度条,弧形百分比

要帮助同事写一个弧度的进度条,进度条顶部有一个小圆,具体如下

需要指出的是,我们canvas的绘制是需要弧度,所以我们代码中使用角度,等待绘制的时候再砖话为弧度值

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div><input type="range" id="cowbell" name="cowbell" min="0" max="100" value="50" step="1"><label for="cowbell">拖拽角度变化</label></div><canvas id="canvas"></canvas><script>const cowbell = document.getElementById("cowbell");cowbell.addEventListener("input", (a, c) => {console.log(cowbell.value)draw(cowbell.value)});let canvas = document.getElementById('canvas');let ctx = canvas.getContext('2d');canvas.width = 500;canvas.height = 500;let conterw = canvas.width / 2;//弧度的中心坐标let conterh = canvas.height / 2;//弧度的中心坐标let sAngle = 150;//其实角度let eAngle = 390;//结束角度let nAngle = 100;//以sAngle为基准的角度let leng = 100;//半径draw(50)//绘制百分比进度function draw(percentage) {//清空画布ctx.clearRect(0, 0, canvas.width, canvas.height);//结束角度 - 起始角度 = 中间区域的范围值  //中间区域的范围值 / 100 *当前进度百分比//得到百分比下的角度值nAngle = (eAngle - sAngle) / 100 * percentage;//绘制一个弧度进度条底色drawArc(sAngle, eAngle, eAngle, conterw, conterh, '#e1e8ee')//绘制一个弧度有进度的drawArc(sAngle, eAngle, nAngle, conterw, conterh, '#6f78cc')//绘制圆的坐标let { x, y } = getArcFillXY(sAngle, eAngle, leng, conterw, conterh, nAngle)//绘制圆drawArcFill(x, y);}console.log()//绘制弧度function drawArc(sAngle, eAngle, nAngle, conterw, conterh, strokeStyle = '#e1e8ee') {ctx.beginPath();//在基础sAngle上加上差量的角度  nAngle += sAngle;//控制最小的角度if (sAngle > nAngle) {nAngle = sAngle;}//  控制最大的角度if (eAngle < nAngle) {nAngle = eAngle;}//绘制角度ctx.arc(conterw, conterh, leng, rad(sAngle), rad(nAngle), false);ctx.strokeStyle = strokeStyle;ctx.lineWidth = 5;ctx.stroke();ctx.closePath();}function drawArcFill(x, y) {//绘制一个半径为5得红色圆形ctx.beginPath();ctx.arc(x, y, 5, 0, 2 * Math.PI, false);ctx.fillStyle = 'red';ctx.fill();ctx.closePath();}//将上述的圆形放在进度条的头部,随着弧形的角度一起变化 /*** */function getArcFillXY(sAngle, eAngle, leng, conterw, conterh, nAngle) {//半径是let x = conterw - leng;let y = conterh;//在基础sAngle上加上差量的角度nAngle += sAngle//控制最小的角度if (sAngle > nAngle) {nAngle = sAngle;}//  控制最大的角度if (eAngle < nAngle) {nAngle = eAngle;}//差值角度let cAngle = nAngle - sAngle;x = Math.cos(rad(nAngle)) * leng + conterw;y = Math.sin(rad(nAngle)) * leng + conterh;return {x, y}}//度数转化为弧度得方法function rad(sAngle) {return sAngle * Math.PI / 180;}</script>
</body></html>

 

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

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

相关文章

【单片机】18-红外线遥控

一、红外遥控背景知识 1.人机界面 &#xff08;1&#xff09;当面操作&#xff1a;按键&#xff0c;旋转/触摸按键&#xff0c;触摸屏 &#xff08;2&#xff09;遥控操作&#xff1a;红外遥控&#xff0c;433M/2.4G无线通信【穿墙能力强】&#xff0c;蓝牙-WIFI-Zigbee-LoRa等…

Maven 项目文档

本章节我们主要学习如何创建 Maven 项目文档。 比如我们在 C:/MVN 目录下&#xff0c;创建了 consumerBanking 项目&#xff0c;Maven 使用下面的命令来快速创建 java 项目&#xff1a; mvn archetype:generate -DgroupIdcom.companyname.bank -DartifactIdconsumerBanking -…

持续集成交付CICD:Jenkins部署

目录 一、理论 1.CI/CD 2.Gitlab内置持续集成 3.Jenkins安装与部署 4.Gitlab服务部署 5.Jenkins服务部署 6.Tomcat服务部署 7.Jenkins–Pipeline流水线项目构建 二、实验 1.Gitlab服务部署 2.Jenkins服务部署 3.Tomcat服务部署 4.Jenkins–Pipeline流水线项目构建…

【centos7安装ElasticSearch】

概述 最近工作中有用到ES &#xff0c;当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本&#xff1a; 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器&#xff0c;本文演示放在&#xff1a; /root/ 下&#xff0c;进行解压&#xff1…

虚拟桌宠模拟器:VPet-Simulator,一个开源的桌宠软件, 可以内置到任何WPF应用程序

虚拟桌宠模拟器&#xff1a;VPet-Simulator&#xff0c;一个开源的桌宠软件, 可以内置到任何WPF应用程序 虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序 获取虚拟桌宠模拟器 OnSteam(免费) 或 通过[Nuget]内置到你的WPF应用程序 1.虚拟桌宠模拟器 详细介绍 …

这短短 6 行代码你能数出几个bug?

前言&#xff1a;本文仅仅只是分享笔者一年前见到的诡异代码&#xff0c;大家可以看看乐子&#xff0c;随便数一数一共有多少个bug&#xff0c;这数bug多少还是要点水平的 在初学编程的时候&#xff0c;写的第一个代码大多都是 hello world&#xff0c;可是就算是 hello world…

GNU和Linux的关系、 Linux的发行版本、CentOs和RedHat的区别

GNU和Linux的关系 其实&#xff0c;我们通常称之为的"Linux"系统&#xff0c;相对更准确的名称应该称为“GNU/Linux”系统&#xff01; 一个功能完全的操作系统需要许多不同的组成部分&#xff0c;其中就包括内核及其他组件&#xff1b;而在GNU/Linux系统中的内核就…

Flutter学习笔记

此篇文章用来记录学习Flutter 和 Dart 相关知识 零.Dart基本数据类型 Dart 是一种静态类型的编程语言&#xff0c;它提供了一系列基本数据类型&#xff0c;用于存储和操作不同种类的数据。以下是 Dart 中的一些基本数据类型以及它们的详细介绍&#xff1a; 1. 整数类型&#…

SpringCloud源码探析(十)-Web消息推送

1.概述 消息推送在日常使用中的场景比较多&#xff0c;比如有人点赞了我的博客或者关注了我&#xff0c;这时我就会收到一条推送消息&#xff0c;以此来吸引我点击或者打开应用。消息推送的方式主要分为两种&#xff1a;web消息推送和移动端消息推送。它将所要发送的信息&…

【2023研电赛】安谋科技企业命题特别奖:面向独居老人的智能居家监护系统

本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题特别奖分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来…

Python爬虫抓取和分析市场数据

在房地产市场&#xff0c;即时掌握和分析数据是非常重要的&#xff0c;因为这可以帮助投资者、房地产中介以及政府等各方做出更明智的决策。本文将介绍如何使用Python爬虫来抓取和分析房地产市场数据&#xff0c;帮助您获取最新的房地产数据并进行深入的分析。通过使用Python爬…

Flutter的Platform介绍-跨平台开发,如何根据不同平台创建不同UI和行为

文章目录 Flutter跨平台概念介绍跨平台开发平台相关性Platform ChannelPlatform-specific UIPlatform Widgets 如何判断当前是什么平台实例 Platform 类介绍获取当前平台的名称检查当前平台其他属性 利用flutter设计跨Android和IOS平台应用的技巧1. 遵循平台的设计准则2. 使用平…