注意:本文属于《html5 Canvas绘制图形入门详解》系列文章中的一部分。若是你是html5初学者,仅仅阅读本文,可能没法较深刻的理解canvas,甚至没法顺畅地通读本文。请点击上述连接以了解使用html5 canvas绘制图形的完整内容。javascript
在html5中,CanvasRenderingContext2D
对象也提供了专门用于绘制圆形或弧线的方法,请参考如下属性和方法介绍:php
arc(x, y, radius, startRad, endRad, anticlockwise)
(x,y)
为圆心、半径为
radius
的圆上的一段弧线。这段弧线的起始弧度是
startRad
,结束弧度是
endRad
。这里的弧度是以x轴正方向(时钟三点钟)为基准、进行顺时针旋转的角度来计算的。
anticlockwise
表示是以逆时针方向仍是顺时针方向开始绘制,若是为
true
则表示逆时针,若是为
false
则表示顺时针。
anticlockwise
参数是可选的,默认为
false
,即顺时针。
arcTo(x1, y1, x2, y2, radius)
(x1,y1)
和端点2
(x2,y2)
这三个点所造成的夹角,而后绘制一段与夹角的两边相切而且半径为
radius
的圆上的弧线。通常状况下,绘制弧线的开始位置是当前端点,结束位置是端点2,而且弧线绘制的方向就是链接这两个端点的最短圆弧的方向。此外,若是当前端点不在所指定的圆上,本方法还将绘制一条从当前端点到弧线起点的直线。
因为详细介绍arcTo()
方法的篇幅较多,请移步至这里查看arcTo()的详细用法。前端
在了解了canvas绘制弧线的上述API以后,咱们就一块儿来看看如何使用arc()
绘制弧线。咱们已经知道,arc()
接收的第4个和第5个参数表示绘制弧线的开始弧度和结束弧度。相信各位读者在学校的数学或几何课程上都学过弧度,弧度是一种角度单位。弧长等于半径的弧,其所对的圆心角就是1弧度。咱们还知道,半径为r
的圆,其周长为2πr
。在具有这些几何知识的前提下,咱们就可使用arc()
方法绘制弧线了。html5
如今,咱们就来绘制一条半径为50px的圆的1/4弧线。java
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>HTML5 Canvas绘制弧线入门示例</title> 6 </head> 7 <body> 8 9 <!-- 添加canvas标签,并加上红色边框以便于在页面上查看 --> 10 <canvas id="myCanvas" width="400px" height="300px" style="border: 1px solid red;"> 11 您的浏览器不支持canvas标签。 12 </canvas> 13 14 <script type="text/javascript"> 15 //获取Canvas对象(画布) 16 var canvas = document.getElementById("myCanvas"); 17 //简单地检测当前浏览器是否支持Canvas对象,以避免在一些不支持html5的浏览器中提示语法错误 18 if(canvas.getContext){ 19 //获取对应的CanvasRenderingContext2D对象(画笔) 20 var ctx = canvas.getContext("2d"); 21 22 //开始一个新的绘制路径 23 ctx.beginPath(); 24 //设置弧线的颜色为蓝色 25 ctx.strokeStyle = "blue"; 26 var circle = { 27 x : 100, //圆心的x轴坐标值 28 y : 100, //圆心的y轴坐标值 29 r : 50 //圆的半径 30 }; 31 //沿着坐标点(100,100)为圆心、半径为50px的圆的顺时针方向绘制弧线 32 ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, false); 33 //按照指定的路径绘制弧线 34 ctx.stroke(); 35 } 36 </script> 37 </body> 38 </html>
对应的显示效果以下图:运行代码canvas
如上所示,咱们设置了绘制的弧线的所在圆的圆心坐标为(100,100)
,半径为50px。因为一个半径为r
的圆的周长为2πr
,也就是说,一个完整的圆,其所对应的弧度为2π
(换算成常规角度就是360°),因此咱们想要画一个圆的1/4弧线,只要弧度为π/2(即90°)就能够了。在上面的代码中,咱们使用了JavaScript中表示π的常量Math.PI
。spa
此外,在上面的代码中,咱们还设置了绘制弧线的方向为顺时针方向(false
)。因为起始弧度为0,结束弧度为π/2,所以弧线将从x轴的正方向开始沿着顺时针方向绘制,从而获得上面的图形。若是咱们将上述代码中的弧线绘制方向改成逆时针,会有什么样的效果呢?code
1 <script type="text/javascript"> 2 //获取Canvas对象(画布) 3 var canvas = document.getElementById("myCanvas"); 4 //简单地检测当前浏览器是否支持Canvas对象,以避免在一些不支持html5的浏览器中提示语法错误 5 if(canvas.getContext){ 6 //获取对应的CanvasRenderingContext2D对象(画笔) 7 var ctx = canvas.getContext("2d"); 8 9 //开始一个新的绘制路径 10 ctx.beginPath(); 11 //设置弧线的颜色为蓝色 12 ctx.strokeStyle = "blue"; 13 var circle = { 14 x : 100, //圆心的x轴坐标值 15 y : 100, //圆心的y轴坐标值 16 r : 50 //圆的半径 17 }; 18 //沿着坐标点(100,100)为圆心、半径为50px的圆的逆时针方向绘制弧线 19 ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, true); 20 //按照指定的路径绘制弧线 21 ctx.stroke(); 22 } 23 </script>
对应的显示效果以下:运行代码
当咱们学会了绘制弧线以后,触类旁通,咱们想要绘制圆形天然也不在话下,只须要将上述代码的结束弧度改成2π便可。
1 <script type="text/javascript"> 2 //获取Canvas对象(画布) 3 var canvas = document.getElementById("myCanvas"); 4 //简单地检测当前浏览器是否支持Canvas对象,以避免在一些不支持html5的浏览器中提示语法错误 5 if(canvas.getContext){ 6 //获取对应的CanvasRenderingContext2D对象(画笔) 7 var ctx = canvas.getContext("2d"); 8 9 //开始一个新的绘制路径 10 ctx.beginPath(); 11 //设置弧线的颜色为蓝色 12 ctx.strokeStyle = "blue"; 13 var circle = { 14 x : 100, //圆心的x轴坐标值 15 y : 100, //圆心的y轴坐标值 16 r : 50 //圆的半径 17 }; 18 //以canvas中的坐标点(100,100)为圆心,绘制一个半径为50px的圆形 19 ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true); 20 //按照指定的路径绘制弧线 21 ctx.stroke(); 22 } 23 </script>
对应的显示效果以下:运行代码
备注:arc()
方法中的起始弧度参数startRad
和结束弧度参数endRad
都是以弧度为单位,即便你填入一个数字,例如360,仍然会被看做是360弧度。将上述代码的结束弧度设为360会产生什么用的后果呢?这就要看绘制的方向了(即anticlockwise
参数的值),若是是顺时针绘制(false
),则将绘制出一个完整的圆形;若是是逆时针绘制,大于2π的弧度将被转换为一个弧度相等、但不大于2π的弧度。例如,将上述代码中的结束弧度设为3π(Math.PI * 3
),若是anticlockwise
为false
,将会显示为一个完整的圆形,若是为true
,则其显示效果与设为π时的显示效果一致。