视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用HTML5CanvasAPI绘制弧线的教程_html5教程技巧
2020-11-27 15:19:51 责编:小采
文档
 绘制标准圆弧

在开始之前,我们优化一下我们的作图环境。灵感来自于上节课的纹理,如果不喜欢这个背景,我在images目录下还提供了其他的背景图,供大家选择。另外把所有的样式表都写在了下。

JavaScript Code复制内容到剪贴板

  1. 新的画布
  2. "canvas-warp">
  3. 你的浏览器居然不支持Canvas?!赶快换一个吧!!
  4. window.onload = function(){
  5. var canvas = document.getElementById("canvas");
  6. canvas.width = 800;
  7. canvas.height = 600;
  8. var context = canvas.getContext("2d");
  9. context.fillStyle = "#FFF";
  10. context.fillRect(0,0,800,600);
  11. }

运行结果:

之所以要绘制一个空白的矩形填满画布,是因为我们之前说过,canvas是透明的,如果不设置背景色,那么它就会被我设置的纹理所覆盖,想要使其拥有背景色(白色),只有绘制矩形覆盖canvas这一个方法。

怎么样,是不是非常的酷?

使用arc()绘制圆弧
arc()的使用方法如下:

JavaScript Code复制内容到剪贴板

  1. context.arc(x,y,radius,startAngle,endAngle,anticlockwise)

前面三个参数,分别是圆心坐标与圆半径。startAngle、endAngle使用的是弧度值,不是角度值。弧度的规定是绝对的,如下图。

anticlockwise表示绘制的方法,是顺时针还是逆时针绘制。它传入布尔值,true表示逆时针绘制,false表示顺时针绘制,缺省值为false。

弧度的规定是绝对的,什么意思呢?就是指你要绘制什么样的圆弧,弧度直接按上面的那个标准填就行了。

比如你绘制 0.5pi ~ 1pi 的圆弧,如果顺时针画,就只是左下角那1/4个圆弧;如果逆时针画,就是与之互补的右上角的3/4圆弧。此处自己尝试,不再举例。

使用切点绘制圆弧

arcTo()介绍:
arcTo()方法接收5个参数,分别是两个切点的坐标和圆弧半径。这个方法是依据切线画弧线,即由两个切线确定一条弧线。
具体如下。

JavaScript Code复制内容到剪贴板

  1. arcTo(x1,y1,x2,y2,radius)

这个函数以给定的半径绘制一条弧线,圆弧的起点与当前路径的位置到(x1, y1)点的直线相切,圆弧的终点与(x1, y1)点到(x2, y2)的直线相切。因此其通常配合moveTo()或lineTo()使用。其能力是可以被更为简单的arc()替代的,其复杂就复杂在绘制方法上使用了切点。

使用切点绘制弧线:
下面的案例我把切线也绘制出来了,看的更清楚一些。

JavaScript Code复制内容到剪贴板

  1. 绘制弧线
  2. "canvas-warp">
  3. 你的浏览器居然不支持Canvas?!赶快换一个吧!!
  4. window.onload = function(){
  5. var canvas = document.getElementById("canvas");
  6. canvas.width = 800;
  7. canvas.height = 600;
  8. var context = canvas.getContext("2d");
  9. context.fillStyle = "#FFF";
  10. context.fillRect(0,0,800,600);
  11. drawArcTo(context, 200, 200, 600, 200, 600, 400, 100);
  12. };
  13. function drawArcTo(cxt, x0, y0, x1, y1, x2, y2, r){
  14. cxt.beginPath();
  15. cxt.moveTo(x0, y0);
  16. cxt.arcTo(x1, y1, x2, y2, r);
  17. cxt.lineWidth = 6;
  18. cxt.strokeStyle = "red";
  19. cxt.stroke();
  20. cxt.beginPath();
  21. cxt.moveTo(x0, y0);
  22. cxt.lineTo(x1, y1);
  23. cxt.lineTo(x2, y2);
  24. cxt.lineWidth = 1;
  25. cxt.strokeStyle = "#0088AA";
  26. cxt.stroke();
  27. }

运行结果:

这个案例也很好说明了arcTo()的各个关键点的作用。为了更清楚的解释,我再标注一个分析图。

这里注意一下,arcTo()绘制的起点是(x0, y0),但(x0, y0)不一定是圆弧的切点。真正的arcTo()函数只传入(x1, y1)和(x2, y2)。其中(x1, y1)称为控制点,(x2, y2)是圆弧终点的切点,它不一定在圆弧上。但(x0, y0)一定在圆弧上。
有一点点绕,下面我们改变drawArcTo()函数的参数来试验一下。
(x2, y2)不一定在弧线上:

JavaScript Code复制内容到剪贴板

  1. drawArcTo(context, 200, 100, 600, 100, 600, 400, 400);

(x0, y0)一定在弧线上:

JavaScript Code复制内容到剪贴板

  1. drawArcTo(context, 400, 100, 600, 100, 600, 400, 400);

挺有意思的,它为了经过(x0, y0)直接将切点和(x0, y0)连接起来形成线段。好执着的弧线……

下载本文
显示全文
专题