有没有人知道在HTML5 canvas元素中是否可以使用JavaScript本地或数学来实现SVG中的evenodd
fill-rule
?这样做的项目链接会很有帮助。
答案 0 :(得分:0)
是的,应该可以使用globalCompositeOperation
。如果我没有弄错的话,默认的“source-over”值应该对应SVG的“evenodd”(否则,请尝试其他几个,看看结果图像是否相同)。
答案 1 :(得分:0)
通过数学方法,您的意思是算法实现吗?当然可以,见http://gpolo.awardspace.info/fill/main.html。它不仅仅是一个演示,而是“以数学方式”解决了这个问题。
答案 2 :(得分:0)
我问自己同样的问题并遇到了this Mozilla Bugreport。
似乎它被bug报告者提交给了WHATWG(画布规格):
Chris Jones,2011-06-10:
让我们等待文档,直到这个规范在whatwg上看起来很稳定(我今天会发布)。
答案 3 :(得分:0)
这是一个非常古老的问题,所以事情当时一定是不同的,但是很久以前,你可以将fillrule
参数传递给fill()
方法。
此fillrule
可以是"nonzero"
,默认值,也可以是"evenodd"
。
var ctx = c.getContext('2d');
drawPath();
ctx.fill();
ctx.translate(70, 0);
drawPath();
ctx.fill('evenodd');
ctx.translate(70, 0);
drawPath();
ctx.stroke();
function drawPath(){
ctx.beginPath();
ctx.arc(30,30,20,0,Math.PI*2);
ctx.lineTo(60,60);
ctx.lineTo(0,0);
ctx.closePath();
}

<canvas id="c"></canvas>
&#13;