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();
x, 椭圆圆心X坐标
y, 椭圆圆心Y坐标
radiusX, 长半轴长度
radiusY, 长半轴长度
rotation, 椭圆旋转角度 (单位是度不是弧度)
startAngle, 椭圆弧起始角弧度 (单位是弧度不是度!)
endAngle, 椭圆弧结束角弧度 (单位是弧度不是度!)
antiClockwise, 是否是逆时针方向绘制。true表示逆时针方向绘制椭圆弧,false顺时针方向绘制椭圆弧。
至于为什么一个方法内惊现 2 种角度单位,我只能说:前端标准就是这么乱!
Google出品的 canvas-5-polyfill.js 用于增强canvas兼容性,它也给canvas加上了ellipse方法