【问题标题】:Attach event listeners to all items on a layer in Paper.js将事件侦听器附加到 Paper.js 中图层上的所有项目
【发布时间】:2021-12-29 01:31:55
【问题描述】:
在 jQuery 中,我可以使用 $("p") 将事件附加到段落等所有元素。 Paper.js 是否存在类似的东西。我尝试使用project.activeLayer.children.onMouseEnter,但没有奏效。
我正在考虑循环遍历 onFrame 函数内的所有孩子,但这似乎是错误的。它可能会将多个事件侦听器附加到同一个项目。因此,所有项目都会附加许多事件侦听器,但我不确定。
在 Paper.js 的项目层中,将事件侦听器附加到所有当前和未来项目的最佳方式是什么?
链接:http://paperjs.org/reference/item/#onmouseenter
【问题讨论】:
标签:
javascript
event-handling
paperjs
【解决方案1】:
您只需攻击Tool 的事件侦听器。
然后,将传递给侦听器的 event 参数将具有一个 item 属性,它是事件目标项。
这是一个简单的sketch 演示。
tool.onMouseDown = (event) => console.log(event.item && event.item.name);
let id = 0;
drawRandomCircle();
setInterval(drawRandomCircle, 2000);
new PointText({
content: 'Click on a circle to log its name',
point: view.center + [0, -80],
justification: 'center'
});
function drawRandomCircle() {
new Path.Circle({
center: Point.random() * view.size,
radius: 50,
fillColor: Color.random(),
name: `item ${++id}`
});
}