我正在尝试绘制多个矩形,然后使用 globalCompositeOperation 'source-in' 掩盖那些效果很好,但问题是当我填充我的矩形时它们消失了......如果我只有一个 fill() 调用它们都正确绘制但只尊重最后应用的填充样式。
有问题的代码 -
ctx.drawImage(self.glass.mask, 256, 375);
ctx.globalCompositeOperation = 'source-in';
ctx.rect(256, 635, 256, 75);
ctx.fillStyle = "#c65127";
ctx.rect(256, 605, 256, 25);
ctx.fillStyle = "#f5f4f0";
ctx.rect(256, 565, 256, 35);
ctx.fillStyle = "#c65127";
ctx.fill();
上面的代码可以正常工作。但如果我这样做,并取下面具 -
ctx.beginPath();
ctx.rect(0, 256, 256, 75);
ctx.fillStyle = "#c65127";
ctx.fill();
ctx.beginPath();
ctx.rect(0, 226, 256, 25);
ctx.fillStyle = "#f5f4f0";
ctx.fill();
ctx.beginPath();
ctx.rect(0, 186, 256, 35);
ctx.fillStyle = "#222";
ctx.fill();
我有每个矩形,他们尊重他们的填充样式。问题是当我启用掩码时,它们不再可见。
您在 globalCompositeOperation 'source-in' 下可以拥有的元素数量是否有限制,或者我只是缺少一些简单的东西?
这里有一些小提琴 -
http://jsfiddle.net/ENtXs/ - 按预期工作,但不尊重填充样式。
http://jsfiddle.net/ENtXs/1/ - 移除掩码以显示所有元素
http://jsfiddle.net/ENtXs/2/ - 添加 beginPath() 和 fill() 元素尊重填充样式。(没有掩饰)
http://jsfiddle.net/ENtXs/3/ - 添加掩码(不再显示)
http://jsfiddle.net/ENtXs/4/ - 只有一个与#3 代码相同的矩形才能正常工作。