在 html/javascript 中请求 undo/redo 个事件
Asking for undo/redo events in html/javascript
我有一个 interactive html5 canvas thing 有时用户会想要撤消他们的操作。我有执行此操作的逻辑,但我不确定如何正确捕获 "user wants to undo" 事件。
目前,我只是监听键盘事件并将 "CTRL+Z" 解释为撤消请求,如下所示:
document.addEventListener("keydown", e => {
const Z_KEY = 90;
let isUndo = e.keyCode == Z_KEY && e.ctrlKey && !e.shiftKey;
if (isUndo) {
restore(revision.undo());
}
});
问题是撤消的标准快捷方式因 OS 而异,并且有完全正交的触发方式(例如 shaking your phone)。
我想要的是以某种方式告诉浏览器我支持撤消,它应该将所有疯狂的 OS 触发撤消的特定方式转发到我指定的方法。就目前的情况而言,浏览器不知道用户正在做任何涉及撤消的事情。浏览器看到的只是 canvas 被点击和绘制。
是否有一种标准方法可以让浏览器为我捕获所有撤消事件?即使供应商发明了新的撤消操作,以一种面向未来的方式继续工作?一个骇人听闻的解决方法呢?或者也许有一个图书馆的重点是解决这个特定问题?
备注:
- 这个问题不同于How to handle undo/redo event in javascript?。那个问的是捕捉元素的变化,而我总是知道任何变化,因为我的代码是执行这些变化的代码。
- 问题 Listen to undo/redo event in contenteditable div 也是关于更改检测而不是实现撤消,并且仅限于特定类型的元素。我愿意使用自定义元素来完成这项工作。
没有标准的 javascript 方法来挂钩像 undo/redo 这样的东西,因为它们没有特定的事件。
也许 Mousetrap 会如您所愿。它是一个用于在 javascript 中抽象键盘事件的库,包括一种执行通用 [system modifier]+key
热键之类的方法。
也就是说,如果您需要移动设备,您可能需要在某处设置一个按钮。 (我不熟悉摇动撤消动作。这似乎是新时代嬉皮士的废话。=P)
我有一个 interactive html5 canvas thing 有时用户会想要撤消他们的操作。我有执行此操作的逻辑,但我不确定如何正确捕获 "user wants to undo" 事件。
目前,我只是监听键盘事件并将 "CTRL+Z" 解释为撤消请求,如下所示:
document.addEventListener("keydown", e => {
const Z_KEY = 90;
let isUndo = e.keyCode == Z_KEY && e.ctrlKey && !e.shiftKey;
if (isUndo) {
restore(revision.undo());
}
});
问题是撤消的标准快捷方式因 OS 而异,并且有完全正交的触发方式(例如 shaking your phone)。
我想要的是以某种方式告诉浏览器我支持撤消,它应该将所有疯狂的 OS 触发撤消的特定方式转发到我指定的方法。就目前的情况而言,浏览器不知道用户正在做任何涉及撤消的事情。浏览器看到的只是 canvas 被点击和绘制。
是否有一种标准方法可以让浏览器为我捕获所有撤消事件?即使供应商发明了新的撤消操作,以一种面向未来的方式继续工作?一个骇人听闻的解决方法呢?或者也许有一个图书馆的重点是解决这个特定问题?
备注:
- 这个问题不同于How to handle undo/redo event in javascript?。那个问的是捕捉元素的变化,而我总是知道任何变化,因为我的代码是执行这些变化的代码。
- 问题 Listen to undo/redo event in contenteditable div 也是关于更改检测而不是实现撤消,并且仅限于特定类型的元素。我愿意使用自定义元素来完成这项工作。
没有标准的 javascript 方法来挂钩像 undo/redo 这样的东西,因为它们没有特定的事件。
也许 Mousetrap 会如您所愿。它是一个用于在 javascript 中抽象键盘事件的库,包括一种执行通用 [system modifier]+key
热键之类的方法。
也就是说,如果您需要移动设备,您可能需要在某处设置一个按钮。 (我不熟悉摇动撤消动作。这似乎是新时代嬉皮士的废话。=P)