我前段时间在寻找同样的问题时遇到了这个问题。也就是说,在 HTML 画布中使用“偶数”填充规则。
经过一些研究,并浏览了邮件列表和补丁,我注意到,事实证明,Firefox 和 Chrome 的最新版本都支持这一点,但每个版本都以不同的、特定于浏览器的方式。
在 Firefox 中,这是使用mozFillRule 属性的问题。例子:
//
// Firefox Example
//
// canv has the HTML canvas element
var ctx = canv.getContext("2d");
ctx.fillStyle = "#ff0000";
ctx.mozFillRule = 'evenodd';
ctx.beginPath();
ctx.moveTo(100, 10);
ctx.lineTo(40, 180);
ctx.lineTo(190, 60);
ctx.lineTo(10,60);
ctx.lineTo(160,180);
ctx.closePath();
ctx.fill();
在 Chrome 中,您可以通过将字符串evenodd作为参数传递给fill
方法来实现。例子:
//
// Chrome Example
//
// canv has the HTML canvas element
var ctx = canv.getContext("2d");
ctx.fillStyle = "#ff0000";
ctx.beginPath();
ctx.moveTo(100, 10);
ctx.lineTo(40, 180);
ctx.lineTo(190, 60);
ctx.lineTo(10,60);
ctx.lineTo(160,180);
ctx.closePath();
ctx.fill('evenodd');
这是我研究的两个浏览器,所以我不知道其他浏览器的状态。希望在不远的将来,我们将能够通过fillRule
现在是HTML 标准一部分的属性来使用此功能。