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

标签 javascript cross-browser dom-events keyevent paperjs

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

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

最佳答案

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

这有点令人困惑,但你可以看看论文的 Key.jsDomEvent.add(document, { 开始的行开始.你可以看到 handleKey仅在 keypress 上调用非特殊键事件。 handleKey是将关键代码插入charCodeMap的代码.所以当keyup事件发生纸张未找到codecharCodeMap并且不调用 handleKey .

如何解决这个问题?

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

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

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

关于javascript - Paper.js 事件行为因浏览器而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292205/

相关文章:

javascript - Ng-repeat,具有不同指令的第一项

javascript - 在 Javascript 中将链接包裹在元素周围的更好方法

javascript - 如何在 HTML DOM 中存储自定义 javascript 对象?

javascript - 如何刷新 Iframe url 并显示加载图像

javascript - 通过额外数据扩展 promise

javascript - 抓取一组包含混合内容的页面的最佳方法

javascript - 在 JavaScript 事件处理 DOM Level 2 中,为什么目标首先获取 "bubbling",然后获取 "capturing"?

用于 keyup 的 Javascript addEventListener 未注册任何键值

javascript - 查询性能不佳

javascript - 检测浏览器是否支持带 iframe 的数据 uri 方案