初识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')
ctx.fillRect(100,100,200,20)
</script>

使用 ctx.strokeRect(x,y,width,height)绘制一个矩形【路径模式】
let ctx= canvas.getContext('2d')
ctx.strokeRect(100,100,200,20)

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();
现在我们绘制了一个圆弧,现在我们来绘制一个圆环

使用canvas绘制一个圆环图
1.我们绘制圆环图。需要使用 content.arc这个方法
2.绘制当前的进度
ctx.arc(x,y,r,0, Math.PI / 180 *( 360 * jinDu/ 100));
3.在圆环中间添加文字
4.解决清晰度的问题
承上启下
我们将使用上面的api,
去绘制一个圆环
绘制一个圆环(带有线宽)
<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) // 文字描述
