Вам нужно перерисовать фигуру перед вызовом метода isPointInPath
.
Я добавил в ваш код функцию для определения положения мыши и другую, которая рисует элемент.Надеюсь, это поможет.
var elements = [];
var canvas = document.getElementById("myCanvas");
canvas.width = "500";
canvas.height = "500";
var context = canvas.getContext("2d");
var mouse;
elements.push({
colour: "#112F41",
x: 200,
y: 240,
r: 100,
sAngle: 0,
eAngle: 2 * Math.PI
});
elements.forEach(element => {
drawElement(element, context);
});
canvas.addEventListener(
"click",
function(event) {
mouse = oMousePos(canvas, event)
elements.forEach(function(element) {
drawElement(element, context);
if(context.isPointInPath(mouse.x, mouse.y)){console.log(mouse)}else{console.log("not in path")}
});
},
false
);
function drawElement(element, context) {
context.strokeStyle = element.colour;
context.arc(element.x, element.y, element.r, element.sAngle, element.eAngle);
context.lineWidth = 2;
context.stroke();
}
function oMousePos(canvas, evt) {
var ClientRect = canvas.getBoundingClientRect();
return { //objeto
x: Math.round(evt.clientX - ClientRect.left),
y: Math.round(evt.clientY - ClientRect.top)
}
}
canvas {
border:1px solid;
}
<canvas id="myCanvas"></canvas>