javascript利用canvas lineTo结合参数方程绘制椭圆(支持IE)

目前使用canvas画布绘制椭圆形的方法有 ellipse()scale()、贝塞尔曲线以及 lineTo(),其中比较推荐 ellipse(),但是该方法尚未纳入标准,IE全系列浏览器都不支持,其它浏览器目前比较好。

如果想兼容IE浏览器,可以考虑使用 lineTo() 方法,但是如果要绘制的椭圆像素较大,会存在很大的效率问题,甚至浏览器崩溃,但是小又少的椭圆影响不大。

canvas-lineto-circle.png

HTML代码

<canvas id="canvas">
	浏览器不支持Canvas
</canvas>

javascript代码

var x = 400, 
	y = 400, 
	a = 400, 
	b = 200; //定义坐标与半径
var deg = 360 * Math.PI / 180;
var canvas = document.getElementById('canvas');
	canvas.width = 800;
	canvas.height = 800;
var cxt = canvas.getContext('2d');
	cxt.lineWidth = '1';
	cxt.strokeStyle = '#293742;';
	cxt.setLineDash([15,5]);
	cxt.beginPath(); 
	cxt.moveTo(x+a, y);
	var step = (a > b) ? 1 / b : 1 / a;	// 每次绘制的路径,也可以自定义一个数值,如果数值偏大,绘制的路径是直线不是弧线。此处使用最长线除1
	for(var i = 0; i<deg; i+=step){
		cxt.lineTo(x + a*Math.cos(i), y + b*Math.sin(i));
	}	
	cxt.stroke();
	cxt.closePath();

上面的椭圆从右顺时针往左绘制,如果要从左往右,则把 x+a 改为 x-a 即可。

关键词: Canvas Canvas圆弧