var pathes = ["M 180,160 0,218 0,0 180,0 z", "m 180,34.57627 -180,0 L 0,0 180,0 z"]
var current = 0;
clickHandler.onclick = function() {
current = (current + 1) % 2;
yourPath.setAttribute('d', pathes[current]);
};
// canvas noise
var ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(300, 300);
function animCanvas() {
requestAnimationFrame(animCanvas);
imageData.data.forEach(function(v, i, a) {
a[i] = Math.random() * 255;
});
ctx.putImageData(imageData, 0, 0);
}
animCanvas();
canvas {
position: absolute;
z-index: 0;
}
svg {
position: absolute;
z-index: 1;
}
<canvas id="canvas" width="600" height="300"></canvas>
<svg id="svg" width="300" height="300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style>
#clickHandler {
pointer-events: all;
}
</style>
<path id="yourPath" d="M 180,160 0,218 0,0 180,0 z" />
<rect id="bg" x="-1%" y="-1%" width="102%" height="102%" />
<mask id="myMask">
<use xlink:href="#bg" fill="white" />
<use xlink:href="#yourPath" fill="black" />
</mask>
</defs>
<use xlink:href="#bg" mask="url(#myMask)" fill="white" />
<use xlink:href="#yourPath" fill="none" id="clickHandler" />
</svg>