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 x e y se 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.