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 函数。透明地处理跨浏览器问题。
查看此 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 函数。透明地处理跨浏览器问题。