由于 HTML Canvas 2D Context标准中并没有直接绘制椭圆与椭圆弧的方法,所以浏览器普遍没有这个方法,不过,Chrome支持 ellipse方法,至于从哪个版本开始支持的,我就未查证了。IE11,Edge, Firefox, Safari目前最新版都还不支持。。。

所以,我们需要用JS来实现这个方法。原理就是用已经支持的其它方法来模拟ellipse方法,可以用lineTo, quadraticCurveTo, bezierCurveTo, arcTo, arc等方法来实现。

用lineTo来模拟的话,就是参数方程的形式,计算出椭圆上的点的坐标,逐点用lineTo绘制模拟椭圆。简单粗暴有效。

用quadraticCurveTo, bezierCurveTo是一种近似模拟,用贝塞尔曲线来拟合椭圆或椭圆弧,关键在于计算合适的控制点。有些特定场景下很适合。

用arcTo, arc来实现也比较简单,不需要复杂计算,由于arcTo, arc只提供了绘制正圆弧的功能,要绘制椭圆弧,配合scale变形就可以了。推荐使用该方法。实现代码如下:

if (CanvasRenderingContext2D.prototype.ellipse == undefined) {CanvasRenderingContext2D.prototype.ellipse = function(x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {this.save();this.translate(x, y);this.rotate(rotation);this.scale(radiusX, radiusY);this.arc(0, 0, 1, startAngle, endAngle, antiClockwise);this.restore();}
}

使用示例:

//
var canvas = document.getElementById("canvas1"),ctx = canvas.getContext('2d');
//....
ctx.moveTo(100,200);
ctx.ellipse(300, 200, 100, 60, 0, 0, Math.PI, true);
ctx.stroke();

ellipse方法各参数的含义:

x, 椭圆圆心X坐标

y, 椭圆圆心Y坐标

radiusX, 长半轴长度

radiusY, 长半轴长度

rotation, 椭圆旋转角度 (单位是度不是弧度)

startAngle, 椭圆弧起始角弧度 (单位是弧度不是度!)

endAngle, 椭圆弧结束角弧度 (单位是弧度不是度!)

antiClockwise, 是否是逆时针方向绘制。true表示逆时针方向绘制椭圆弧,false顺时针方向绘制椭圆弧。

至于为什么一个方法内惊现 2 种角度单位,我只能说:前端标准就是这么乱!

Google出品的 canvas-5-polyfill.js 用于增强canvas兼容性,它也给canvas加上了ellipse方法

HTML5 Canvas 绘制椭圆与椭圆弧的实现相关推荐

  1. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆

    html5中怎么利用Canvas绘制椭圆 发布时间:2021-07-08 16:32:10 来源:亿速云 阅读:58 作者:Leah html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详 ...

  2. html弧形列表效果,JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例

    本文实例讲述了JavaScript+html5 canvas绘制的圆弧荡秋千效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { margin:50 ...

  3. html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形

    html5: Canvas 绘制基本图形 从绘制直线 到 路径 Jack Lee 的 CSDN 博客 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.n ...

  4. 在html画一个自动缩放圆环,使用html5 canvas绘制圆环动效

    最近笔者有个需求,需求内容为:一组文字显示在圆环的周围,用户可添加文字,文字围绕着圆环,每个词对应圆环周围的的蓝色小圆点,当用户鼠标放在圆环上方小蓝点时时,实现放射出三角形,再显示出文字,先看看动图效 ...

  5. java canvas 画图片_[Java教程][HTML5] Canvas绘制简单图片

    [Java教程][HTML5] Canvas绘制简单图片 0 2016-05-13 13:00:04 获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象 ...

  6. html5 canvas绘制圆形进度实例

    2019独角兽企业重金招聘Python工程师标准>>> html5 canvas绘制圆形进度实例 <canvas id="test" width=200 h ...

  7. html 画动画效果,html5 canvas绘制曲线动画特效

    特效描述:html5 canvas绘制 曲线动画特效. 代码结构 1. HTML代码 Balls Size Speed Delay Go! Presets: Atomic Flower Spiro Y ...

  8. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例

    本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: www.jb51.net canvas绘制时钟 div{text-ali ...

  9. 用html5做一条线,使用HTML5 canvas绘制线条的方法

    使用HTML5 canvas绘制线条的方法 发布时间:2020-08-29 11:24:23 来源:亿速云 阅读:96 作者:小新 这篇文章主要介绍了使用HTML5 canvas绘制线条的方法,具有一 ...

最新文章

  1. 取代人类医生?AI给你做的诊断你敢信吗
  2. 问题集锦(48-51)
  3. “设为桌面图标”的ASP源代码
  4. npm 安装yarn_问题解决记录-npm和yarn全局安装成功后命令无法执行的问题
  5. Chrome网络库的请求处理
  6. ArcGIS实验教程——实验四十一:ArcGIS区域分析统计直方图(土地利用--坡度分级柱状统计图的制作)
  7. pythonsqlite3模糊_Python编写通讯录通过数据库存储实现模糊查询功能
  8. Nexus搭建Maven服务器
  9. [wbia 2.2] 对检索结果进行评估
  10. 计算机基础知识ip地址,计算机基础知识练习题
  11. java 外部类和内部类_java – 外部和内部类方法之间的锁定和同...
  12. 拼多多的车开向五环内!将继续撒钱,撒到你用为止...
  13. 计算机局域网共享本地安全策略,如何设置局域网共享
  14. echarts 柱状图间距修改
  15. 如何更改Win8,8.1中文版到英文版,亲测!
  16. 计算机可移动磁盘无法显示图片,移动硬盘不显示盘符原因及解决方法步骤介绍【图文详解】...
  17. python字体有哪些种类_Python的数据类型(字符串类型),python
  18. jquery DataTables 固定列(fixedcolumns)不生效问题
  19. 测试基础 之 黑盒测试方法
  20. 『VulnHub系列』Hacker Fest: 2019-Walkthrough

热门文章

  1. pyplot画多个图,在一个图中绘制多个子图
  2. 学习状态通道,Part-3:多跳交易/中心辐射通道
  3. 2021网易Java高级面试题及答案,王者笔记!
  4. Android世界时钟-时间1970-1-1 0:0无法设置的代码调用和原因
  5. 小翼管家linux电脑,小翼管家
  6. 【转】基础的重要性(程序员之路) 经验分享15篇
  7. 前端脚手架开发工具包
  8. 我的专业用是计算机用英语怎么说,要表达“我的专业是”用英语怎么说?
  9. 关于工作时间分配(二)
  10. uni-app css之background属性说明