在 html/javascript 中请求撤消/重做事件

2024-06-24

我有一个交互式 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(使用前将#替换为@)

在 html/javascript 中请求撤消/重做事件 的相关文章

随机推荐

  • c中的字母相减

    我想知道如何在C中 减去字母 我的意思是 我有 2 个字母 a 和 c 我想执行 c a b 即 3 1 2 如何在 C 中获得相同的行为 我可以转换字母 gt 数字但如何管理长度有限字母表的 谢谢 您可以将字母视为数字 然后添加字母 a
  • 在Java中存储和搜索二维空间坐标的良好数据结构是什么

    我目前正在为一款游戏编写一个插件 其中一个功能包括设置由 2 个二维坐标定义的区域 矩形的左上和右下区域 然后 这些区域将被存储 并且将具有与每个区域相关联的各种其他数据 当玩家在世界上移动时 我需要仅根据玩家的坐标确定他何时进入这些区域之
  • 如何取消注册我的应用程序的文件格式?

    在 Windows 10 中的 Delphi 10 4 2 win 32 VCL 应用程序中 我注册了 ICO我的图形应用程序的文件格式使用DSiWin32 DSiRegisterUserFileAssoc https github com
  • 使用 iPhone 上传视频

    可以将视频上传到服务器吗 我知道图像是可能的 如果有人能指出我正确的方向 那就太好了 Thanks 2015 年 8 月编辑 这个答案现在已经严重过时了 在撰写本文时 选项并不多 而且视频的大小也相对较小 如果您现在正在考虑这样做 我会使用
  • 如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证

    我想知道是否有一种方法可以仅为特定 ASP Net Web API 控制器的特定操作启用 Windows 身份验证 我的 Web API Web 服务有几个具有多种操作的控制器 但只有一个控制器的一个操作需要 Windows 身份验证 此
  • Scala 修饰符和类型参数化

    我正在创建一个记忆类 每个类都会记忆一个函数类型并具有以下定义 class MemoizedFunction1 T1 R f T1 gt R private this val cache mutable Map T1 R def apply
  • 如何在PHP框架中实现引导类?

    我正在制作自己的 MVC 框架 请不要对我投反对票 因为每个人都想制作一个框架 所以 我想制作一个引导类 就像我在许多框架中看到的那样 我之所以这样做是因为我决定通过开始从内部学习框架来进入下一个层次 但我在克服它们时遇到了一些问题 但我会
  • longjmp 应该恢复堆栈吗?

    据我了解 setjmp保存当前上下文 并在调用时恢复它longjmp 然而 下一段代码打印 15 我用 g 编译 没有任何优化 我是否误解了这个结构或者我错过了什么 include
  • 将 PDF 附加到另一个 PDF 文件的可用空间

    病毒帕特尔的教程 http viralpatel net blogs itext tutorial merge split pdf files using itext jar 关于如何合并和拆分 PDF 文件很有用 不幸的是 我需要的不仅仅
  • 使 diff-lcs 的输出可读

    我正在使用 diff lcs gem 输出两个 html 内容体之间的差异 这是示例内容 版本一 p Paragraph one Sentence one p p Paragraph two Another sentence p p Par
  • JavaFX 2.0 - 为 FXML 中的自定义组件创建操作处理程序

    我想在我的新组件中添加自定义操作 这个怎么做 示例代码 成分 public class MyCustomComponent extends Region public MyCustomComponent super this setOnMo
  • file_get_content 不适用于 PHP 中的 https

    有人在通过 https 的网站显示内容时遇到过问题吗 该代码一直有效 直到服务器上的所有站点都获得了 ssl 证书是 tlss 1 2 可能有什么关系 所以我尝试执行此操作的网站现在拥有此证书 data file get contents
  • 熊猫计算唯一行

    我有一个类似于以下内容的 pandas 数据框 ColA ColB 1 1 1 1 1 1 1 2 1 2 2 1 3 2 我想要一个具有相同功能的输出Counter https docs python org 2 library coll
  • 在sbt的build.sbt文件中添加模块依赖信息

    我在 IntelliJ 中有一个多模块项目 如该屏幕截图所示 contexProcessor 模块依赖于 contextSummary 模块 一旦我在项目结构中设置了依赖项 IntelliJ 就会处理所有事情 然而 当我跑步时sbt tes
  • Node.js - 如何在 Node.js 应用程序中获取我的外部 IP 地址?

    我正在使用 node js 我需要获取由 ISP 提供的外部 IP 地址 有没有办法在不使用类似服务的情况下实现这一目标http myexternalip com raw http myexternalip com raw Thanks 可
  • QNetworkAccessManager 的替代方案

    我正在BB10中绘制地图 地图被划分为图块 开始时 用户给出经度 纬度和缩放级别 地图将显示在该坐标处 我通过使用 QNetworkAccessManager 执行 http 请求来获得单个图块 首先下载 7x5 块 但问题是 当用户开始在
  • 获取登录用户的 AppData\Local 文件夹

    我目前正在使用 Environment GetFolderPath Environment SpecialFolder LocalApplicationData 检索当前用户的AppData Local小路 该程序需要提升的权限 并且在标准
  • 限制 Three.js 中的帧速率以提高性能,requestAnimationFrame?

    我在想对于我做的一些项目来说 60fps 是完全不需要的 我想如果我能让它以 30 fps 的帧速率平稳运行 我就可以拥有更多以 30 fps 运行的对象和事物 我想如果我在 Three js 中编辑 requestAnimationFra
  • 更改 SQL Server 中的身份种子(永久!)

    有没有办法永久更改身份列的身份种子 使用 DBCC CHECKIDENT 似乎只是设置了最后一个值 如果表被截断 所有值都会重置 dbcc checkident Test SeedIdent reseed 1000 select name
  • 在 html/javascript 中请求撤消/重做事件

    我有一个交互式 html5 canvas 的东西 http algorithmicassertions com quirk有时用户会想要撤消他们的操作 我已经实现了执行此操作的逻辑 但我不确定如何正确捕获 用户想要撤消 事件 目前 我只是监