Javascript 如何为绘制的画布形状设置id?

Javascript 如何为绘制的画布形状设置id?,javascript,css,canvas,shape,Javascript,Css,Canvas,Shape,我看到了这个问题,我不知道如何为每个圆圈设置id,并从javascript代码和css代码访问它们?(例如,单击)您不能在已绘制到画布的对象上设置ID 元素本身只是一个位图,不提供任何绘制对象的信息 如果您需要与画布内的项目交互,则需要手动保留对绘制所有内容的位置的引用,或使用“对象拾取”之类的系统或使用内置的。您不能对已绘制到画布的内容设置ID 元素本身只是一个位图,不提供任何绘制对象的信息 如果需要与画布内的项目交互,则需要手动保留绘制所有内容的位置的参考,或使用“对象拾取”之类的系统或使用

我看到了这个问题,我不知道如何为每个圆圈设置id,并从javascript代码和css代码访问它们?(例如,单击)

您不能在已绘制到画布的对象上设置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()
,但后者更简单,而且速度足够快


您的目的是为每个圆添加画布……但在这个问题上,如何在圆之间绘制垂直线?“对象拾取”是什么意思?不,你不应该为每个圆创建不同的画布,但你需要自己处理每个圆。对象拾取是处理渲染图像的一种方法,例如,您的目的是为每个圆添加画布……但在这个问题中,如何在圆之间绘制垂直线?“对象拾取”是什么意思?不,你不应该为每个圆创建不同的画布,但你需要自己处理每个圆。对象拾取是处理渲染图像的一种方法,例如,如何在第一次单击时将文本设置为任意圆?如何在第一次单击时将文本设置为任意圆?