Paper.js事件行为在浏览器之间有所不同

时间:2015-12-15 14:49:26

标签: javascript javascript-events cross-browser keyevent paperjs

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

请注意,在运行它时,会记录键事件。在Chrome中,仅记录 Ctrl keyup事件。在Firefox中,都会记录 V 键盘和 Ctrl 键盘事件。

1 个答案:

答案 0 :(得分:2)

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

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

如何解决这个问题?

你正在做的事情很简单,所以也许只使用本机DOM事件处理会处理它:

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

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