我有一个交互式 html5 canvas 的东西 http://algorithmicassertions.com/quirk有时用户会想要撤消他们的操作。我已经实现了执行此操作的逻辑,但我不确定如何正确捕获“用户想要撤消”事件。
目前,我只是监听键盘事件并将“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());
}
});
问题是撤消的标准快捷方式因操作系统而异,并且有完全正交的方式来触发它(例如摇动你的手机 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/UndoRedo.html).
我想要的是以某种方式告诉浏览器我支持撤消,并且它应该将所有疯狂的特定于操作系统的触发撤消的方式转发到我指定的方法。就目前情况而言,浏览器不知道用户正在执行任何涉及撤消的操作。浏览器看到的只是一个被点击并绘制的画布。
是否有标准方法要求浏览器捕获all我的撤消事件?即使供应商发明了新的撤消操作,也能以一种面向未来的方式继续工作吗?一个 hacky 解决方法怎么样?或者也许有一个图书馆专注于解决这个特定问题?
Notes:
- 这个问题不同于如何在 JavaScript 中处理撤消/重做事件? https://stackoverflow.com/questions/15516218/how-to-handle-undo-redo-event-in-javascript。那一个询问捕获对元素的更改,而我总是知道任何更改,因为我的代码是执行这些更改的代码。
- 问题监听 contenteditable div 中的撤消/重做事件 https://stackoverflow.com/questions/15516218/how-to-handle-undo-redo-event-in-javascript也是关于更改检测而不是实现撤消,并且仅限于特定类型的元素。我愿意使用自定义元素来完成这项工作。
没有标准的 javascript 方法来挂钩诸如撤消/重做之类的事情,因为它们没有特定的事件。
Maybe 捕鼠器 https://craig.is/killing/mice做你想做的事。它是一个用于在 javascript 中抽象键盘事件的库,并包含一种执行通用操作的方法[system modifier]+key
热键之类的东西。
也就是说,如果您想要移动设备,您可能需要在某个地方有一个按钮。 (我不熟悉摇动撤消操作。这似乎是新时代嬉皮士的废话。=P)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)