首页 > 其他分享 >canvas绘制圆环

canvas绘制圆环

时间:2023-11-16 10:01:02浏览次数:40  
标签:200 canvas ctx 100 绘制 Math 圆环

初识canvas

canvas 我们可以理解为是一个画布。
它是一个载体。
我们的文字,图案,都是在这个载体(画布)上来进行操作的。

canvas的5个要素

canvas 具有的5个要素:
1.id 元素的唯一标识
2.width 宽度
3.height 高度
4.画笔,上下文 canvas.getContext('2d')
5.内容(文字,图形,其他)

canvas 有两种形式的绘制模式

canvas 有两种形式的绘制模式:
1.填充模式(我们可以理解为是实心的) 如:ctx.fillRect 
2.路径模式(空心,线段连成的图案): 由一系列的点连成的线段 ctx.strokeRect

使用ctx.fillRect(x,y,width,height)绘制一个矩形【填充模式】

<body>
  <canvas id="canvas" width="1000" height="500" ></canvas>
</body>
<script>
  let  canvas =document.getElementById('canvas')
  // 获取画笔(上下文)
  let ctx= canvas.getContext('2d')
  // 绘制一个矩形 fillRect(x坐标,y坐标,宽度,高度)
  ctx.fillRect(100,100,200,20)
</script>

使用 ctx.strokeRect(x,y,width,height)绘制一个矩形【路径模式】

let ctx= canvas.getContext('2d')
ctx.strokeRect(100,100,200,20);

使用canvas绘制一个圆环图

1.我们绘制圆环图。需要使用 content.arc这个方法
2.绘制当前的进度   ctx.arc(x,y,r,0, Math.PI / 180 *( 360 * jinDu/ 100));

3.在圆环中间添加文字
4.解决清晰度的问题

content.arc(圆点x, 圆点y, 半径, 初始角度0, 结束角度Math.PI) 绘制圆弧;

content.arc(圆点x, 圆点y, 半径, 初试角度0, Math.PI, false); 
上面这个方法是绘制圆弧的。
Math.PI 是180度。
如果初始角度0,结束角度Math.PI是整个圆弧的角度,
默认顺时针false, 逆时针true
content.arc(300, 300, 100,0, Math.PI);
content.stroke();
现在我们绘制了一个圆弧,现在我们来绘制一个圆环

绘制一个圆环(带有线宽)

<body>
  <canvas id="canvas" width="400" height="400">
 </body>
 <script type="text/javascript">
  var canvas=document.getElementById("canvas");
  var ctx=canvas.getContext("2d");  
  // 开始画线
  ctx.beginPath();
  ctx.arc(200,200,100,0, 2*Math.PI);
  // 线宽
  ctx.lineWidth=20;
  // 线的颜色
  ctx.strokeStyle = '#a0a'
  // 绘制形状的轮廓。这个有的小伙伴不太理解。我详细说下。
  ctx.stroke();
 </script>

stroke()的理解

canvas中的stroke()的方法,用于在Canvas上绘制形状的轮廓。
我的理解:当我们使用stroke()方法后。
Canvas会使用当前的线宽、线条样式(如实线、虚线等)以及线条颜色等属性。
沿着之前定义的路径或形状的外边缘进行绘制。
线条会从形状的起点延伸至终点,形成了一个封闭的轮廓。
因此:当我们使用
ctx.lineWidth=20; // 定义线宽
ctx.strokeStyle = '#a0a' // 线的颜色
如果最后不使用 ctx.stroke(); 无法在画笔上进行绘制轮廓

绘制当前的进度

<body>
  <canvas id="canvas" width="400" height="400">
 </body>
 <script type="text/javascript">
  var canvas=document.getElementById("canvas");
  var ctx=canvas.getContext("2d");  

  ctx.beginPath();
  ctx.arc(200,200,100,0, 2*Math.PI);
  // 线宽
  ctx.lineWidth=20;
  // 线的颜色
  ctx.strokeStyle = '#ccc'
  // 绘制形状的轮廓。
  ctx.stroke();

  ctx.beginPath();
  // 当前进度
  let jinDu = 80
  // 占比
  ctx.arc(200,200,100,0, Math.PI / 180 *( 360 * jinDu/ 100));
  // 线宽
  ctx.lineWidth=20;
  // 线的颜色
  ctx.strokeStyle = '#a1a'
  // 绘制形状的轮廓。
  ctx.stroke();
 </script>
</html>

给圆环中间设置文字描述

// 设置位置的位置
ctx.fillStyle='#a1a'; //颜色
ctx.textAlign='center'; // 水平居中
ctx.textBaseline='middle'; // 垂直居中
ctx.fillText(`项目完成进度${jinDu}%`,200,200) // 文字描述

标签:200,canvas,ctx,100,绘制,Math,圆环
From: https://www.cnblogs.com/IwishIcould/p/17829453.html

相关文章

  • 第二十三篇 - d3绘制直方图
    当下探讨用d3制作简单横向直方图效果图:一、下载d3【npminstalld3】二、导入d3【import*asd3from"d3";】二、画直方图参考链接:https://www.cnblogs.com/xuepei/p/7527082.html1.准备表格数据rectlist:[{week:"星期一",product:8......
  • vscode编写js canvas无代码提示的解决方法
    解决方法:如果是2d上下文,则在获取上下文的前一句加上/**@type{CanvasRenderingContext2D}*/如果是3d上下文,则加上/**@type{WebGLRenderingContext}*/letdrawing=document.querySelector("#canvas")if(drawing.getContext){/**@type......
  • 软件测试|使用python绘制等高线密度图
    简介等高线密度图(ContourDensityPlot)是一种可视化数据分布的有效方式,特别适用于显示二维数据的密度分布情况。Python提供了丰富的工具和库,使得创建等高线密度图变得相对容易。在本文中,我们将介绍如何使用Python和Matplotlib库创建等高线密度图,并提供一个示例来演示整个过程。步骤......
  • uniapp 之绘制海报 并适应机型
    之前绘制的海报出现的问题:①海报有一角圆角没体现出来②海报内容随机型,变动到其他位置(并不是想要的地方)针对于这个问题进行修改注意:海报设置的宽度与你canvas给的标签的宽高是保持一致,下面图片为完成的海报图    一、设置海报的初......
  • 微信小程序canvas 设置旋转css 不生效
    问题项目中有使用canvas生成条码(一维码)的功能,使用的插件wxbarcode来生成的,但是项目需求的条码是要竖向的,插件的生成的是横向的,不知道是否有参数去控制,当时图省事想着直接用css旋转一下好了,在模拟器上看到的确实也没有问题,但是在真机上就出问题,没有旋转,还发生了偏移解决开始一......
  • 百度地图GL javascript API 如何绘制流动箭头的线?
    要使用百度地图GLJavaScriptAPI绘制流动箭头线,可以使用Polyline和Symbol样式来实现。下面是一个示例代码://创建地图实例varmap=newBMapGL.Map("mapContainer");map.centerAndZoom(newBMapGL.Point(116.404,39.915),11);//创建折线varpoints=[newBMapG......
  • matlab地图仪绘制
    %绘制地球仪,并标出我们的位置clareset;loadtopo;[x,y,z]=sphere(45);%45是画出来的球面的经纬分面数s=surface(x,y,z,'FaceColor','texturemap','CData',topo);colormap(topomap1);%Brightenthecolormapforbetterannotationvisibility:brighten......
  • Matlab绘制信号包络线
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 【每日例题】蓝桥杯 c++ 绘制表格
    绘制表格题目蓝桥杯绘制表格题目分析阅读题目,我们可以将表格分为四个部分,头、中间的竖线部分与横线部分、尾。因此,我们可以启用多个for循环分别解决在第一行,我们也可以分为三个部分,第一部分符号为:“┌”,第二部分的中间部分使用for循环输入:“─┬”,第三部分符号为:“─┐”......
  • CSS绘制无状态的音频波形图
    效果代码这是从codepen参考过来的一段代码,自己diy了一下。可以根据需求修改显示的条数、宽度、颜色、跳动频率及幅度。importReactfrom'react';constSoundWave=()=>{return(<divclass="sound-wave"><divclass="sound-bar"></div>......