Javascript 如何为绘制的画布形状设置id?
我看到了这个问题,我不知道如何为每个圆圈设置id,并从javascript代码和css代码访问它们?(例如,单击)您不能在已绘制到画布的对象上设置ID 元素本身只是一个位图,不提供任何绘制对象的信息Javascript 如何为绘制的画布形状设置id?,javascript,css,canvas,shape,Javascript,Css,Canvas,Shape,我看到了这个问题,我不知道如何为每个圆圈设置id,并从javascript代码和css代码访问它们?(例如,单击)您不能在已绘制到画布的对象上设置ID 元素本身只是一个位图,不提供任何绘制对象的信息 如果您需要与画布内的项目交互,则需要手动保留对绘制所有内容的位置的引用,或使用“对象拾取”之类的系统或使用内置的。您不能对已绘制到画布的内容设置ID 元素本身只是一个位图,不提供任何绘制对象的信息 如果需要与画布内的项目交互,则需要手动保留绘制所有内容的位置的参考,或使用“对象拾取”之类的系统或使用
如果您需要与画布内的项目交互,则需要手动保留对绘制所有内容的位置的引用,或使用“对象拾取”之类的系统或使用内置的。您不能对已绘制到画布的内容设置ID 元素本身只是一个位图,不提供任何绘制对象的信息
如果需要与画布内的项目交互,则需要手动保留绘制所有内容的位置的参考,或使用“对象拾取”之类的系统或使用内置的。您可以通过在绘制圆时定义单击对象来解决此问题。在回路内部绘制圆圈(参考由以下人员制作的小提琴): 然后:
- 将单击处理程序添加到画布
- 正确的鼠标位置
- 通过对象循环查找(x,y)是否在圆内:
canvas.onclick = function(e) {
// correct mouse coordinates:
var rect = canvas.getBoundingClientRect(), // make x/y relative to canvas
x = e.clientX - rect.left,
y = e.clientY - rect.top,
i = 0, circle;
// check which circle:
while(circle = circles[i++]) {
context.beginPath(); // we build a path to check with, but not to draw
context.arc(circle.x, circle.y, circle.radius, 0, 2*Math.PI);
if (context.isPointInPath(x, y)) {
alert("Clicked circle: " + circle.id);
break;
}
}
};
您可以选择使用math而不是isPointInPath()
,但后者更简单,而且速度足够快
您可以通过在绘制圆时定义单击对象来解决此问题。在回路内部绘制圆圈(参考由以下人员制作的小提琴): 然后:
- 将单击处理程序添加到画布
- 正确的鼠标位置
- 通过对象循环查找(x,y)是否在圆内:
canvas.onclick = function(e) {
// correct mouse coordinates:
var rect = canvas.getBoundingClientRect(), // make x/y relative to canvas
x = e.clientX - rect.left,
y = e.clientY - rect.top,
i = 0, circle;
// check which circle:
while(circle = circles[i++]) {
context.beginPath(); // we build a path to check with, but not to draw
context.arc(circle.x, circle.y, circle.radius, 0, 2*Math.PI);
if (context.isPointInPath(x, y)) {
alert("Clicked circle: " + circle.id);
break;
}
}
};
您可以选择使用math而不是isPointInPath()
,但后者更简单,而且速度足够快
您的目的是为每个圆添加画布……但在这个问题上,如何在圆之间绘制垂直线?“对象拾取”是什么意思?不,你不应该为每个圆创建不同的画布,但你需要自己处理每个圆。对象拾取是处理渲染图像的一种方法,例如,您的目的是为每个圆添加画布……但在这个问题中,如何在圆之间绘制垂直线?“对象拾取”是什么意思?不,你不应该为每个圆创建不同的画布,但你需要自己处理每个圆。对象拾取是处理渲染图像的一种方法,例如,如何在第一次单击时将文本设置为任意圆?如何在第一次单击时将文本设置为任意圆?