2011-12-09 39 views
3

我已經使用了clearRect函數,但沒有看到多邊形的等價物。我天真地試着:如何清除畫布元素中的多邊形區域?

ctx.fillStyle = 'transparent'; 
ctx.beginPath(); 
ctx.moveTo(0, 0); 
ctx.lineTo(100,50); 
ctx.lineTo(50, 100); 
ctx.lineTo(0, 90); 
ctx.closePath(); 
ctx.fill(); 

但是,這只是吸引透明區域,並沒有什麼已經存在的效果。有沒有辦法清除畫布元素內的多邊形區域?

回答

13

您可以使用compositing設置爲'destination-out'此操作:

ctx.globalCompositeOperation = 'destination-out'; 
ctx.beginPath(); 
ctx.moveTo(0, 0); 
ctx.lineTo(100,50); 
ctx.lineTo(50, 100); 
ctx.lineTo(0, 90); 
ctx.closePath(); 
ctx.fill(); 

例子:

enter image description here

嘗試在jsFiddle

+4

感謝喬納斯!注意自我:爲了達到你想要的效果,你需要一個不透明的填充顏色(沒有alpha透明度)。 – Benjie

+0

謝謝@Benjie,您的評論完整答案,我很久以前就在尋找它。 –

+0

很好用 - 鏈接到[合成](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation)已經移動 – TadLewis