将事件侦听器附加到 Paper.js 中图层上的所有项目
Attach event listeners to all items on a layer in Paper.js
在 jQuery 中,我可以使用 $("p")
将事件附加到段落等所有元素。 Paper.js 是否存在类似的东西。我尝试使用 project.activeLayer.children.onMouseEnter
但没有用。
我正在考虑遍历 onFrame
函数中的所有子项,但这似乎是错误的。它可能会将多个事件侦听器附加到同一个项目。所以,所有项目都会有很多事件监听器,但我不确定。
将事件侦听器附加到 Paper.js 项目层中所有当前和未来项目的最佳方法是什么?
你只需要攻击 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}`
});
}
在 jQuery 中,我可以使用 $("p")
将事件附加到段落等所有元素。 Paper.js 是否存在类似的东西。我尝试使用 project.activeLayer.children.onMouseEnter
但没有用。
我正在考虑遍历 onFrame
函数中的所有子项,但这似乎是错误的。它可能会将多个事件侦听器附加到同一个项目。所以,所有项目都会有很多事件监听器,但我不确定。
将事件侦听器附加到 Paper.js 项目层中所有当前和未来项目的最佳方法是什么?
你只需要攻击 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}`
});
}