Javascript Paper.js Mouseup事件被工具禁止

Javascript Paper.js Mouseup事件被工具禁止,javascript,javascript-events,mouseevent,paperjs,Javascript,Javascript Events,Mouseevent,Paperjs,我正在使用Paper.js,我需要在光栅上的鼠标上做一些事情。但是,当我使用全局工具空间时,事件似乎不会触发 请注意,单击并拖动会生成类似以下内容的日志: 光栅鼠标向下 光栅鼠标器 。。。[更多“光栅鼠标拖动”] 光栅鼠标器 光栅鼠标 指示graster.on('mouseup'函数(){…})按预期正确命中 但是,在这个包含显示拖动区域功能的函数中,graster.on('mouseup'函数(){…})未正确命中。请注意,日志中不包含“光栅鼠标”,仅包含“光栅鼠标向下”和“光栅鼠标拖动” 为

我正在使用Paper.js,我需要在光栅上的鼠标上做一些事情。但是,当我使用全局工具空间时,事件似乎不会触发

请注意,单击并拖动会生成类似以下内容的日志:

光栅鼠标向下

光栅鼠标器

。。。[更多“光栅鼠标拖动”]

光栅鼠标器

光栅鼠标

指示
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;
}