我是画布的新手,我正试着在我之前在画布上绘制的圆圈上点击鼠标。当我点击它们时,我正试图改变圆圈的颜色(可能是绿色)。
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var radius = 15;
for (var i = 0; i < 600; i += 100) {
var x = 100 + i;
var y = 100;
draw_circle(i, x, y, radius);
}
function draw_circle(ID, x, y, radius) {
context.beginPath();
context.arc(x, y, radius, 0, Math.PI * 2, false);
context.fillStyle = 'red';
context.fill();
context.lineWidth = 3;
context.strokeStyle = 'black';
context.stroke();
context.closePath();
}
<!DOCTYPE HTML>
<html>
<head>
<style>
html,
body {
width: 100%;
height: 100%;
margin: 0px;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="700" height="700"></canvas>
</body>
</html>
答案 0 :(得分:2)
使用SVG,它很容易 - 圆圈是一个元素,可以有一个点击处理程序,并且fill
可以操作以改变颜色。
使用Canvas,您需要:
cx, cy
x, y, r
,查看dx * dx + dy * dy < r * r
,dx = cx - x
,dy = cy - y
。单击满足此等式的圆圈答案 1 :(得分:1)
再次添加弧形路径并使用鼠标位置isPointInPath()
。一次只能测试一个弧,但清除和添加新路径的速度很快。这样做是循环的。
var c = document.querySelector("canvas"), ctx = c.getContext("2d");
getArc(50, 50, 40);
ctx.fill();
c.onclick = function(e) {
var rect = this.getBoundingClientRect(), // get abs. position of canvas
x = e.clientX - rect.left, // adjust mouse-position
y = e.clientY - rect.top;
getArc(50, 50, 40); // get path wo/ filling/stroking it
if (ctx.isPointInPath(x, y)) alert("Clicked");
};
function getArc(x, y, r) {
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI*2);
ctx.closePath();
}
&#13;
<canvas></canvas>
&#13;
另一种方法是使用数学和三角学:
// at this point we have the mouse position, so:
var dx = x - arcX,
dy = y - arcY,
dist = Math.abs(Math.sqrt(dx*dx + dy*dy));
if (dist <= radius) { ...clicked... };
提示:您可以使用r 2 来跳过dist的平方。
答案 2 :(得分:0)
使用Canvas,您可以使用addEventListener函数。您可以检测到很多鼠标事件:mousedown,mouseup,mousemove,mouseout和mouseover。 这是一个例子:
<!DOCTYPE HTML>
<html>
<head>
<style>
html,
body {
width: 100%;
height: 100%;
margin: 0px;
}
</style>
<script>
function initialize() {
var canvas = document.getElementById("myCanvas");
canvas.addEventListener("mousedown", doMouseDown, false);
}
function doMouseDown() {
canvas_X = event.pageX;
canvas_Y = event.pageY;
alert("X = " + canvas_X + "Y = " + canvas_Y);
}
</script>
</head>
<body>
<canvas id="myCanvas" width="700" height="700"></canvas>
</body>
</html>