1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
你想做的事是不可能的——至少不是這樣。問(wèn)題是畫(huà)布實(shí)際上并不知道你畫(huà)的東西的形狀。它只知道單個(gè)像素顏色。
但是,您可以做的是將按鈕的邊界框 - 屏幕位置和尺寸 - 保留為 Path2D 矩形,并使用該函數(shù)context.isPointInPath(path2d,x,y)檢查是否有人在畫(huà)布上按鈕占據(jù)的區(qū)域內(nèi)單擊。
這是一個(gè)示例(只需單擊“運(yùn)行代碼片段”):
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var image = new Image();
var buttons = [];
function draw(e) {
let x, y, width, height, path;
// first button
x = 20;
y = 20;
width = 100;
height = 20;
context.drawImage(e.target, x, y, width, height);
path = new Path2D();
path.rect(x, y, width, height);
buttons.push(path);
// second button
x = 150;
y = 20;
width = 100;
height = 20;
context.drawImage(e.target, x, y, width, height);
path = new Path2D();
path.rect(x, y, width, height);
buttons.push(path);
}
function canvasClicked(e) {
let button;
for (var a = 0; a < buttons.length; a++) {
button = buttons[a];
if (context.isPointInPath(button, e.offsetX, e.offsetY)) {
console.log("button " + (a + 1) + " clicked");
}
}
}
image.onload = draw;
image.src = "https://picsum.photos/id/866/200/300";
canvas.addEventListener("click", canvasClicked);
<canvas id="canvas" style="background-color:grey;"></canvas>
添加回答
舉報(bào)