uniapp小程序使用canvas画圆

news/2024/9/29 1:31:53/
<view class="container"><canvas canvas-id="arcCanvas" id="arcCanvas" class="arc-canvas"                                     width="300" height="300"></canvas>
</view>

最开始我使用的uni.createSelectorQuery()来获取元素

onMounted(() => {const query = uni.createSelectorQuery();query.select('#progressCanvas').node().exec((res) => {if (res[0] && res[0].node) {const canvas = res[0].node;const context = canvas.getContext('2d');const percentage = 75;  // 进度百分比,可以调整drawProgressBar(context, percentage);} else {console.error('Canvas node not found');}});
});

网上找了很多都是用这种方法,但是我放到小程序中,不起作用。

于是就换成了uni.createCanvasContext('arcCanvas')方法获取

        const ctx = uni.createCanvasContext('arcCanvas');let canvas={width:250,height:250}// 外圈圆const outerRadius = 110;//半径const outerX = canvas.width / 2;//x轴const outerY = canvas.height / 2;//y轴ctx.beginPath();//开始画路径ctx.arc(outerX, outerY, outerRadius, 0, 2 * Math.PI);//画圆// 描边ctx.strokeStyle = 'white';//边框设置为白色ctx.stroke();//画出当前边框// 填充ctx.fillStyle='white';//填充为白色ctx.fill();//为当前圆填色// 中间圆const middleRadius = 90;//半径const middleX = canvas.width / 2;//x轴const middleY = canvas.height / 2;//y轴ctx.beginPath();//开始画路径// 灰色ctx.arc(middleX, middleY, middleRadius, 1.5, 1.5 * Math.PI);//画圆// 设置边框宽ctx.lineWidth = 10;// 描边框ctx.strokeStyle = '#F5F5F7';ctx.stroke();// 蓝色填充实ctx.beginPath();ctx.arc(middleX, middleY, middleRadius, 1.5, 1.2 * Math.PI);ctx.lineWidth = 10;//设置边框宽度ctx.strokeStyle = '#00C3CE';ctx.stroke();// 设置阴影的颜色ctx.setShadow(0, 10, 10, '#E6F9FA');ctx.stroke()// 保存状态,以便在中间圆内部绘制文字ctx.save();// 内圈圆const innerRadius = 60;const innerX = canvas.width / 2;const innerY = canvas.height / 2;ctx.beginPath();ctx.arc(innerX, innerY, innerRadius, 0, 2 * Math.PI);ctx.lineWidth = 4;ctx.setShadow(0, 2,30, '#E6F9FA');ctx.stroke()ctx.strokeStyle = '#f3fafa';ctx.stroke();ctx.fillStyle = '#fff';ctx.fill();// 在中间圆内居中加上文字const text = '80%';const text2 = '已修课程';ctx.font = 'bold 40px Arial';ctx.textAlign = 'center';ctx.fillStyle = 'black';ctx.fillText(text, innerX,  innerY+10); // 10是调整文字位置的偏移量,可以根据实际情况调整ctx.font = 'bold 14px Arial';ctx.fillText(text2, innerX, innerY + 30); // 10是调整文字位置的偏移量,可以根据实际情况调整// 恢复状态ctx.restore();ctx.draw()

 


http://www.ppmy.cn/news/1530758.html

相关文章

Django一分钟:借助Django的认证系统快速实现RBAC权限校验以及Session会话

引言 Django自带一套认证与权限系统帮助我们快速的实现RBAC权限控制。今天我们要讨论的是Django的认证与权限系统怎么使用&#xff0c;以及Django在背后为我们做了些什么。 一、权限系统会创建数据库表 如果使用了Django的认证系统(在settings中注册appdjango.contrib.auth)…

【网络安全】网络基础第一阶段——第三节:网络协议基础---- VLAN、Trunk与三层交换技术

目录 一、交换机 1.1 交换机定义 1.1.1 交换机 1.2 工作原理 1.2.1 数据帧的转发 1.2.2 交换机处理数据帧的三种行为 1.2.3 交换机通信 二、虚拟局域网&#xff08;VLAN&#xff09; 2.1 虚拟局域网简介 2.1.1 为什么需要VLAN 2.1.2 广播域的分割与VLAN的必要性 2.…

毕设基于SSM+Vue3实现设备维修管理系统四:后台框架及基础增删改查功能实现

本章介绍后端基础框架及基础的增删改查功能实现&#xff0c;创建基础的dao、service即controller层相关的基类&#xff0c;并实现基础的增删改查相关功能。 源码下载&#xff1a;点击下载 讲解视频&#xff1a; SMMVUE3实现设备维修管理系统毕设&#xff1a;后端框架搭建及表外…

SQLServer TOP(Transact-SQL)

1、本文内容 语法参数最佳实践兼容性支持互操作性限制和局限示例 适用于&#xff1a; Microsoft Fabric Microsoft FabricWarehouse 中的 SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure SynapseAnalytics Analytics Platform System &#xff08;PDW&#xff09;SQL A…

高级Python Web开发架构与设计模式

高级Python Web开发架构与设计模式 目录 &#x1f3d7;️ 架构风格概述 1.1 &#x1f5bc;️ MVC与MTV架构模式的对比1.2 &#x1f310; RESTful与GraphQL的设计差异1.3 ⚙️ CQRS在Web应用中的应用1.4 &#x1f389; 事件驱动架构的应用与设计 &#x1f9e9; 设计模式详解 2…

ppt一键生成免费版软件有哪些?如何高效生成论文答辩?

答辩经验丰富的人都知道&#xff0c;制作论文答辩ppt是一项既繁琐又耗时的工作。 我们需要从数万字的论文中提炼关键点&#xff0c;梳理内容的逻辑关系&#xff0c;然后进行细致的排版和美化&#xff0c;最后还要进行反复的检查和试讲。整个过程不仅耗费时间&#xff0c;而且需…

C# Linq介绍

LINQ&#xff08;Language Integrated Query&#xff09;是 C# 和其他 .NET 语言中的一种查询语法&#xff0c;它允许开发人员直接在代码中使用类似 SQL 的语法来查询和操作数据。LINQ 的目标是为不同的数据源&#xff08;如集合、数据库、XML 等&#xff09;提供统一的查询方式…

从预测性维护到智能物流:ARM边缘计算控制器的工业实践

工业4.0时代的到来&#xff0c;边缘计算技术成为连接物理世界与数字世界的桥梁。ARM架构的边缘计算控制器凭借其低功耗、高能效和灵活性等特点&#xff0c;在工业自动化领域展现出巨大潜力。本文将通过几个实际应用案例来探讨ARM边缘计算控制器是如何提升生产线效率和安全性的&…