通过HTML5 Canvas API绘制弧线和圆形的教程


Posted in HTML / CSS onMarch 14, 2016

在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍:

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

在canvas画布上绘制以坐标点(x,y)为圆心、半径为radius的圆上的一段弧线。这段弧线的起始弧度是startRad,结束弧度是endRad。这里的弧度是以x轴正方向(时钟三点钟)为基准、进行顺时针旋转的角度来计算的。anticlockwise表示是以逆时针方向还是顺时针方向开始绘制,如果为true则表示逆时针,如果为false则表示顺时针。anticlockwise参数是可选的,默认为false,即顺时针。
通过HTML5 Canvas API绘制弧线和圆形的教程

arc()方法中的弧度计算方式

JavaScript Code复制内容到剪贴板
  1. arcTo(x1, y1, x2, y2, radius)  

这个方法将利用当前端点、端点1(x1,y1)和端点2(x2,y2)这三个点所形成的夹角,然后绘制一段与夹角的两边相切并且半径为radius的圆上的弧线。一般情况下,绘制弧线的开始位置是当前端点,结束位置是端点2,并且弧线绘制的方向就是连接这两个端点的最短圆弧的方向。此外,如果当前端点不在所指定的圆上,本方法还将绘制一条从当前端点到弧线起点的直线。
由于详细介绍arcTo()方法的篇幅较多,请移步至这里查看arcTo()的详细用法。

在了解了canvas绘制弧线的上述API之后,我们就一起来看看如何使用arc()绘制弧线。我们已经知道,arc()接收的第4个和第5个参数表示绘制弧线的开始弧度和结束弧度。相信各位读者在学校的数学或几何课程上都学过弧度,弧度是一种角度单位。弧长等于半径的弧,其所对的圆心角就是1弧度。我们还知道,半径为r的圆,其周长为2πr。在具备这些几何知识的前提下,我们就可以使用arc()方法绘制弧线了。

使用canvas绘制弧线

现在,我们就来绘制一条半径为50px的圆的1/4弧线。

JavaScript Code复制内容到剪贴板
  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>  

对应的显示效果如下图:
通过HTML5 Canvas API绘制弧线和圆形的教程

使用canvas沿着顺时针方向绘制弧线
如上所示,我们设置了绘制的弧线的所在圆的圆心坐标为(100,100),半径为50px。由于一个半径为r的圆的周长为2πr,也就是说,一个完整的圆,其所对应的弧度为2π(换算成常规角度就是360°),所以我们想要画一个圆的1/4弧线,只要弧度为π/2(即90°)就可以了。在上面的代码中,我们使用了JavaScript中表示π的常量Math.PI。

此外,在上面的代码中,我们还设置了绘制弧线的方向为顺时针方向(false)。由于起始弧度为0,结束弧度为π/2,因此弧线将从x轴的正方向开始沿着顺时针方向绘制,从而得到上面的图形。如果我们将上述代码中的弧线绘制方向改为逆时针,会有什么样的效果呢?

JavaScript 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>  

对应的显示效果如下:
通过HTML5 Canvas API绘制弧线和圆形的教程

使用canvas沿着逆时针方向绘制弧线

使用canvas绘制圆形

当我们学会了绘制弧线之后,举一反三,我们想要绘制圆形自然也不在话下,只需要将上述代码的结束弧度改为2π即可。

JavaScript 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.     //以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>  

对应的显示效果如下:
通过HTML5 Canvas API绘制弧线和圆形的教程

JavaScript 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.     //以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,则其显示效果与设为π时的显示效果一致。
通过HTML5 Canvas API绘制弧线和圆形的教程

结束弧度设为3π时,顺时针(false)旋转的绘制效果
通过HTML5 Canvas API绘制弧线和圆形的教程

结束弧度设为3π时,逆时针(true)旋转的绘制效果

HTML / CSS 相关文章推荐
通过css3动画和opacity透明度实现呼吸灯效果
Aug 09 HTML / CSS
利用CSS3的checked伪类实现OL的隐藏显示的方法
Dec 18 HTML / CSS
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
Feb 04 HTML / CSS
CSS3中的@keyframes关键帧动画的选择器绑定
Jun 13 HTML / CSS
CSS3为背景图设置遮罩并解决遮罩样式继承问题
Jun 22 HTML / CSS
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
Jun 03 HTML / CSS
html5需遵循的6个设计原则
Apr 27 HTML / CSS
h5调用摄像头的实现方法
Jun 01 HTML / CSS
如何用H5实现一个触屏版的轮播器的实例
Jan 09 HTML / CSS
HTML5语义化元素你真的用对了吗
Aug 22 HTML / CSS
canvas绘制图片drawImage使用方法
Sep 15 HTML / CSS
如何利用 CSS Overview 面板重构优化你的网站
Oct 24 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
Mar 14 #HTML / CSS
html5 canvas移动浏览器上实现图片压缩上传
Mar 11 #HTML / CSS
HTML5实现多张图片上传功能
Mar 11 #HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
Mar 08 #HTML / CSS
多视角3D逼真HTML5水波动画
Mar 03 #HTML / CSS
HTML5的新特性(1)
Mar 03 #HTML / CSS
HTML5 Canvas实现烟花绽放特效
Mar 02 #HTML / CSS
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
PHP中路径问题的解决方案
2006/10/09 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
python实现百度关键词排名查询
2014/03/30 Python
python求pi的方法
2014/10/08 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python retrying模块的使用方法详解
2019/09/25 Python
python做接口测试的必要性
2019/11/20 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
python安装后的目录在哪里
2020/06/21 Python
Python中return函数返回值实例用法
2020/11/19 Python
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2019教师的学习计划
2019/06/25 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python