在 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 被点击和绘制。

是否有一种标准方法可以让浏览器为我捕获所有撤消事件?即使供应商发明了新的撤消操作,以一种面向未来的方式继续工作?一个骇人听闻的解决方法呢?或者也许有一个图书馆的重点是解决这个特定问题?

备注:

没有标准的 javascript 方法来挂钩像 undo/redo 这样的东西,因为它们没有特定的事件。

也许 Mousetrap 会如您所愿。它是一个用于在 javascript 中抽象键盘事件的库,包括一种执行通用 [system modifier]+key 热键之类的方法。

也就是说,如果您需要移动设备,您可能需要在某处设置一个按钮。 (我不熟悉摇动撤消动作。这似乎是新时代嬉皮士的废话。=P)