由于
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变形就可以了。推荐使用该方法。实现代码如下:
所以,我们需要用JS来实现这个方法。原理就是用已经支持的其它方法来模拟ellipse方法,可以用lineTo, quadraticCurveTo, bezierCurveTo, arcTo, arc等方法来实现。
用lineTo来模拟的话,就是参数方程的形式,计算出椭圆上的点的坐标,逐点用lineTo绘制模拟椭圆。简单粗暴有效。
用quadraticCurveTo, bezierCurveTo是一种近似模拟,用贝塞尔曲线来拟合椭圆或椭圆弧,关键在于计算合适的控制点。有些特定场景下很适合。
用arcTo, arc来实现也比较简单,不需要复杂计算,由于arcTo, arc只提供了绘制正圆弧的功能,要绘制椭圆弧,配合scale变形就可以了。推荐使用该方法。实现代码如下: