【问题标题】:Paper.js Event Behavior Differs Between BrowsersPaper.js 事件行为因浏览器而异
【发布时间】:2016-03-21 10:04:13
【问题描述】:

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

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

【问题讨论】:

  • ^ 这看起来可能是相关的。可能您还需要考虑 keydown 以跟踪同时进行的两个键。在 Chrome 中,我可以从“V”得到响应,只是不能与“Ctrl”结合使用。
  • 我在github上提交了一个bug;这个提交解决了这个问题:github.com/paperjs/paper.js/commit/…
  • 嗨@Scott H,如果我的回答解决了您的问题,请考虑通过单击复选标记接受它。没有义务这样做,但它确实有助于人们知道有可用的答案。
  • @bmacnaughton 您能否根据该提交中的更改提供一些有关 Paper.js 将来如何处理此问题的信息来更新您的答案?知道什么时候会从 boolean-fix 渗透到 development 到 master 吗?

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


【解决方案1】:

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

这有点令人困惑,但您可以查看论文的Key.js,从DomEvent.add(document, { 开始的行开始。您可以看到 handleKey 仅在 keypress 事件中被调用以获取非特殊键。 handleKey 是将密钥代码插入charCodeMap 的代码。所以当keyup事件发生时,paper在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 函数。透明地处理跨浏览器问题。

【讨论】:

  • 显然 Chrome 不会在 Windows 和 Linux 上生成按键,但在 Mac 上会生成。
猜你喜欢
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2012-10-15
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多