登录  /  注册
首页 > web前端 > H5教程 > 正文

使用HTML5 Canvas API绘制弧线的教程_html5教程技巧

php中文网
发布: 2016-05-16 15:45:28
原创
1648人浏览过

绘制标准圆弧

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

下。
JavaScript Code复制内容到剪贴板
  1. nbsp;html>   
  2. "zh">   
  3.   
  4.      "UTF-8">   
  5.     新的画布   
  6.     
  7.         body { background: url("./images/bg3.jpg") repeat; }  
  8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
  9.        
  10.   
  11.   
  12. "canvas-warp">   
  13.     "canvas">   
  14.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  15.        
  
  •   
  • <script> </script>
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •         context.fillStyle = "#FFF";   
  •         context.fillRect(0,0,800,600);   
  •   
  •     }   
  •   
  •   
  •   
  • 运行结果:
    2016322110254564.jpg (850×500)

    之所以要绘制一个空白的矩形填满画布,是因为我们之前说过,canvas是透明的,如果不设置背景色,那么它就会被我设置的

    纹理所覆盖,想要使其拥有背景色(白色),只有绘制矩形覆盖canvas这一个方法。

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

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

    JavaScript Code复制内容到剪贴板
    1. context.arc(x,y,radius,startAngle,endAngle,anticlockwise)  

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

    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. nbsp;html>   
    2. "zh">   
    3.   
    4.      "UTF-8">   
    5.     绘制弧线   
    6.     
    7.         body { background: url("./images/bg3.jpg") repeat; }  
    8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
    9.        
    10.   
    11.   
    12. "canvas-warp">   
    13.     "canvas">   
    14.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    15.        
      
  •   
  • <script> </script>
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •         context.fillStyle = "#FFF";   
  •         context.fillRect(0,0,800,600);   
  •   
  •         drawArcTo(context, 200, 200, 600, 200, 600, 400, 100);   
  •     };   
  •   
  •     function drawArcTo(cxt, x0, y0, x1, y1, x2, y2, r){   
  •         cxt.beginPath();   
  •         cxt.moveTo(x0, y0);   
  •         cxt.arcTo(x1, y1, x2, y2, r);   
  •   
  •         cxt.lineWidth = 6;   
  •         cxt.strokeStyle = "red";   
  •         cxt.stroke();   
  •   
  •         cxt.beginPath();   
  •         cxt.moveTo(x0, y0);   
  •         cxt.lineTo(x1, y1);   
  •         cxt.lineTo(x2, y2);   
  •   
  •         cxt.lineWidth = 1;   
  •         cxt.strokeStyle = "#0088AA";   
  •         cxt.stroke();   
  •   
  •     }   
  •   
  •   
  •   
  • 运行结果:
    2016322110438098.jpg (850×500)

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

    这里注意一下,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);  

    2016322110549543.jpg (600×425)

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

    JavaScript Code复制内容到剪贴板
    1. drawArcTo(context, 400, 100, 600, 100, 600, 400, 400);  

    2016322110625028.jpg (600×425)

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

    智能AI问答
    PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
    来源:php中文网
    收藏 点赞
    上一篇:详解通过HTML5 Canvas实现图片的平移及旋转变化的方法_html5教程技巧 下一篇:HTML5移动端手机网站开发流程_html5教程技巧
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    作者最新文章
    最新问题
    关于CSS思维导图的课件在哪? 课件
    凡人来自于2024-04-16 10:10:18
    相关专题
    更多>
    热门推荐
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习
    PHP中文网抖音号
    发现有趣的

    Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号