Método isPointInPath
El método isPointInPath(x,y) detecta si un punto cuyas coordenadas son x e y se encuentra dentro de un trazado dado.
| JavaScript | Descripción | Defecto | |
|---|---|---|---|
| isPointInPath() | context.isPointInPath(x,y); | Detecta si un punto cuyas coordenadas son xeyse encuentra en un trazado dado | 
Vea la chuleta con las propiedades y metodos() de canvas.
Un ejemplo fácil
A continuación dibujamos un trazado en el <canvas>, y utilizamos el método  isPointInPath() en una sentencia condicional if.
Si ( if ) el punto se encuentra en el trazado, dibujamos un pequeño circulo con el centro en el punto.
if (ctx.isPointInPath(px, py)) {
   ctx.beginPath();
   ctx.arc(px, py, 4, 0, 2 * Math.PI);
}
De lo contrario ( else ) dibujamos un pequeño rectángulo.
var canvas = document.getElementById("lienzo");
if (canvas && canvas.getContext) {
  var ctx = canvas.getContext("2d");
  if (ctx) {
    // dibujamos un trazado
    ctx.beginPath();
    ctx.moveTo(20, 200);
    ctx.lineTo(125, 20);
    ctx.lineTo(230, 200);
    ctx.closePath();
    ctx.stroke();
    ctx.fillStyle = "#6ab150";
    // queremos saber si el punto p está en el trazado.
    // sus coordenadas son:
    var px = 100, py = 90;
    if (ctx.isPointInPath(px, py)) {
      ctx.beginPath();
      ctx.arc(px, py, 4, 0, 2 * Math.PI);
    } else {
      ctx.beginPath();
      ctx.rect(px - 3, py - 3, 6, 6);
    }
    ctx.fill();
  }
}
Sí, el punto cuyas coordenadas son px = 100, py = 90 se encuentra dentro del trazado.
Otro ejemplo
Para obtener la posición del ratón encima del <canvas> hemos escrito la función oMousePos() que devuelve un objeto con las coordenadas x e y del ratón.
Esta función utiliza el método getBoundingClientRect().
function oMousePos(canvas, evt) {
  var ClientRect = canvas.getBoundingClientRect();
	return { //objeto
	x: Math.round(evt.clientX - ClientRect.left),
	y: Math.round(evt.clientY - ClientRect.top)
}
También hemos escrito la función 
  marcarPos() que da formato al <div id="output"> donde apuntamos el valor de las coordenadas del ratón.
Utilizamos el método addEventListener() 
para detectar el movimiento del ratón ("mousemove") encima del <canvas>. 
La función marcarPos() detecta la posición del ratón encima del trazado, utilizando isPointInPath, y marca las coordenadas de este.
function marcarPos(output, x, y) {
  if (ctx.isPointInPath(x, y)) {
    output.innerHTML = ("x: " + x + ", y: " + y);
    output.style.top = (y + 10) + "px";
    output.style.left = (x + 10) + "px";
    output.style.backgroundColor = "#FFF";
    output.style.border = "1px solid #d9d9d9"
    canvas.style.cursor = "pointer";
  } else {
    output.innerHTML = "";
    output.style.top = 0 + "px";
    output.style.left = 0 + "px";
    output.style.backgroundColor = "transparent"
    output.style.border = "none";
    canvas.style.cursor = "default";
  }
}
var canvas = document.getElementById("lienzo1");
if (canvas && canvas.getContext) {
  var ctx = canvas.getContext("2d");
  if (ctx) {
    // dibujamos un trazado
    ctx.fillStyle = "#6ab150";
    ctx.lineWidth = 3;
    ctx.beginPath();
    ctx.moveTo(20, 200);
    ctx.lineTo(125, 20);
    ctx.lineTo(230, 200);
    ctx.closePath();
    ctx.fill();
    canvas.addEventListener("mousemove", function(evt) {
      var mousePos = oMousePos(canvas, evt);
      var output = document.getElementById("output");
      marcarPos(output, mousePos.x, mousePos.y)
    }, false);
  }
}
function marcarPos(output, x, y) {
  if (ctx.isPointInPath(x, y)) {
    output.innerHTML = ("x: " + x + ", y: " + y);
    output.style.top = (y + 10) + "px";
    output.style.left = (x + 10) + "px";
    output.style.backgroundColor = "#FFF";
    output.style.border = "1px solid #d9d9d9"
    canvas.style.cursor = "pointer";
  } else {
    output.innerHTML = "";
    output.style.top = 0 + "px";
    output.style.left = 0 + "px";
    output.style.backgroundColor = "transparent"
    output.style.border = "none";
    canvas.style.cursor = "default";
  }
}
function oMousePos(canvas, evt) {
  var rect = canvas.getBoundingClientRect();
  return { //object
    x: Math.round(evt.clientX - rect.left),
    y: Math.round(evt.clientY - rect.top)
  };
}Pase por encima del trazado para obtener la posición actual del ratón.