Это действительно старый вопрос, поэтому в то время все должно было быть по-другому, но с давних пор вы можете передать параметр 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>