Javascript Paper.js Mouseup事件被工具禁止
我正在使用Paper.js,我需要在光栅上的鼠标上做一些事情。但是,当我使用全局工具空间时,事件似乎不会触发 请注意,单击并拖动会生成类似以下内容的日志: 光栅鼠标向下 光栅鼠标器 。。。[更多“光栅鼠标拖动”] 光栅鼠标器 光栅鼠标 指示Javascript Paper.js Mouseup事件被工具禁止,javascript,javascript-events,mouseevent,paperjs,Javascript,Javascript Events,Mouseevent,Paperjs,我正在使用Paper.js,我需要在光栅上的鼠标上做一些事情。但是,当我使用全局工具空间时,事件似乎不会触发 请注意,单击并拖动会生成类似以下内容的日志: 光栅鼠标向下 光栅鼠标器 。。。[更多“光栅鼠标拖动”] 光栅鼠标器 光栅鼠标 指示graster.on('mouseup'函数(){…})按预期正确命中 但是,在这个包含显示拖动区域功能的函数中,graster.on('mouseup'函数(){…})未正确命中。请注意,日志中不包含“光栅鼠标”,仅包含“光栅鼠标向下”和“光栅鼠标拖动” 为
graster.on('mouseup'函数(){…})代码>按预期正确命中
但是,在这个包含显示拖动区域功能的函数中,graster.on('mouseup'函数(){…})代码>未正确命中。请注意,日志中不包含“光栅鼠标”,仅包含“光栅鼠标向下”和“光栅鼠标拖动”
为什么在第二种情况下,鼠标不在光栅上启动?如何调整第二个草图中的代码,使其能够启动?好吧,简单的答案是,问题在于('mouseup',…)
处理程序从未被调用。纸面代码获取最近的点击,即您正在绘制的红色矩形,并检查它是否响应“mouseup”事件。没有。然后它检查父链,红色矩形的父链就是层,因此它也不会通过.responses
测试。因为光栅与与与光栅关联的红色矩形处理程序处于同一级别,所以永远不会调用它们
最简单的答案是使用全局工具在视图上安装处理程序,而不是在光栅上安装处理程序,例如
function onMouseUp(event) {
console.log('vup');
}
请参阅paperjs代码(中):
我最终在github上打开了一个问题,因为我在使用它时看到了一个问题-如果使用view.on('drag',…),则不会调用矩形的.removeOn函数。在纸上操作鼠标可能需要一点大修。我通常只使用两种类型的处理程序-一个全局工具处理程序,然后,如果需要,使用path.removeOn(…)的特定处理程序(如果需要)。这将在paperjs中修复,但Júrg提供了一个干净的解决方法:将红色矩形设置为指南。见他评论中的草图:
function callEvent(view, type, event, point, target, lastPoint) {
var item = target,
mouseEvent;
function call(obj) {
if (obj.responds(type)) {
if (!mouseEvent) {
mouseEvent = new MouseEvent(type, event, point, target,
lastPoint ? point.subtract(lastPoint) : null);
}
if (obj.emit(type, mouseEvent) && mouseEvent.isStopped) {
event.preventDefault();
return true;
}
}
}
while (item) {
if (call(item))
return true;
item = item.getParent();
}
if (call(view))
return true;
return false;
}