Paper.js 事件行为因浏览器而异

Paper.js Event Behavior Differs Between Browsers

查看此 Paper.js sketch,您可以在其中尝试使用 Ctrl+V[= 粘贴示例项目23=]。此草图适用于 Firefox 但不适用于 Chrome 或 Opera(这是我测试的范围)。为什么会这样以及如何修改此草图,以便我可以使用 Ctrl + V 在 运行ning 时粘贴示例文本Chrome?

中的草图

请注意,当您 运行 它时,按键事件会被记录下来。在 Chrome 中,仅记录 Ctrl 按键事件。在 Firefox 中,V keyup 和 Ctrl keyup 事件都会被记录。

问题似乎是 Chrome 在按下控制键时不会生成按键事件。 paperjs 中的逻辑依赖于 keypress 事件(最终)产生 keyup 事件。

这有点令人困惑,但您可以查看论文的 Key.js,从 DomEvent.add(document, { 开始的那一行开始。您可以看到 handleKey 仅在 keypress 事件中为非特殊键调用。 handleKey是将关键代码插入charCodeMap的代码。因此,当 keyup 事件发生时,纸张在 charCodeMap 中找不到 code 并且不会调用 handleKey.

如何解决这个问题?

您正在做的事情很简单,所以也许只需要使用本机 DOM 事件处理就可以搞定:

document.onkeyup = function (e) {
    var code = e.which || e.keyCode;
    if (code === 'v' && e.ctrlKey) {
        // do your pasting here
    }
}

您可能需要考虑其他浏览器变体,但这应该能让您入门。如果您正在使用 jQuery,您应该考虑使用 jQuery 的 keyup 函数。透明地处理跨浏览器问题。