微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取单击元素的位置和 id 以更改颜色并在其上绘制线条

如何解决如何获取单击元素的位置和 id 以更改颜色并在其上绘制线条

我正在开发一个基本的窗口框架配置器。我在下面的功能中拆分了眼镜。我想在单击时更改颜色并获取单击玻璃的位置以绘制开口方向线。 我试图理解并实现 Lavrton 的方法 (https://codesandbox.io/s/0xj7zml2zl?file=/src/index.js) 但我无法成功。

function glassDraw(piece,frameWidth,frameHeight) {

var glassGroup = new Konva.Group();

for (i = 0; i <piece; i++) {
    var glass = new Konva.Rect({
        name: 'Rect',x: padding + (frameWidth / piece) * i,y: padding,width: frameWidth / piece,height: frameHeight - padding * 2,fill: 'lightblue',id: 'glass'+i,});
  

    glassGroup.add(glass);
    
} 
glassGroup.find("Rect").on('click',function (e) {
    // get id of the cube i drag
    var clickedId = e.target.attrs.id;
    
    $('#theId').html(clickedId);
 
})
return glassGroup;

}

当我使用带有 konva element("glass"+i) id 的 getelementbyid 方法时,它返回 null。我想我需要得到一个 konva 元素。

解决方法

您必须为所有矩形创建一个点击侦听器。

for (let rect of glassGroup.children) {
    rect.on('click',() => {

        console.log(rect.x(),rect.y()); // current position of the object
        console.log(rect.id()); // log id of the object
        rect.fill('green'); // set color to green
        layer.batchDraw(); // update layer (batchDraw just for better performance .draw() would work to)
})

rect.on('click',rect.y()); // current position of the object console.log(rect.id()); // log id of the object rect.fill('green'); // set color to green layer.batchDraw(); // update layer (batchDraw just for better performance .draw() would work to) })

确保在更改某些内容后始终通过调用 stage.draw() 或 layer.draw()(或 batchDraw() 以获得更好的性能)来更新舞台,否则您的舞台将不会显示您所做的任何事情。

如果此代码的某些内容不起作用,请随时询问。

祝你有美好的一天。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。