首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dotnet 文档应用的撤销重做设计

从需求层面上讲,撤销就是撤回到上一个步骤,而重做或者说恢复其实就是在恢复撤销的步骤。可以看到越在后面添加的操作,在撤销的时候越快进行撤销。而越早撤销的操作,在重做的时候就越早重做。...因此咱需要有一个足够通用类型用来定义撤销重做操作 最基础的撤销重做操作其实只有两个动作,一个是就是被撤销,另一个就是被重做恢复,可以定义的类型如下 interface IOperation {...另外,从撤销重做的业务上,也不需要使用抽象类,只需要有撤销重做两个方法就可以 在应用程序可以根据业务定义多个撤销重做栈的内容,例如说做一个和 PPT 差很多的软件,有编辑和播放两个不同的界面,这两个界面的撤销重做相互独立...,那么在这两个模式里面就可以定义两个不同的 撤销重做栈 对象 在撤销重做栈这个类型里面,最简单的版本是只有两个 Stack 一个是撤销另一个是恢复。...在用户重做恢复时,从撤销的栈弹出操作,放入到重做恢复的栈里 随着业务的迭代,其实纯撤销重做栈会有一些通用的撤销恢复的功能还需要额外开发 提供当前合入多个不同的业务的操作做一个的业务,例如我有图片编辑模块

65240
您找到你想要的搜索结果了吗?
是的
没有找到

低代码平台的撤销重做该如何设计?

中聊到了低代码平台的属性面板的设计,今天来聊一下画布区域的撤销重做的设计。 撤销重做其实是我们平时一直在用的操作。...默认情况下,用户在画布的一系列操作会改变整个画布的呈现状态: 在进行到某个操作时,用户是可以回退到之前的状态的,也就是撤销: 当然在进行撤销操作后,用户是可以恢复这个操作的,对应的就是重做: 来看下之前画布的数据结构...那么对于重做,就是撤销的逆向操作了,可以理解为就是正常的操作: const history = state.histories[state.historyIndex]; switch (history.changeType...、重做就已经实现了。...还有一个场景是:在撤销/重做的过程中,又正常对画布区域执行了操作。

82430

python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器

大写P粘贴 u回来 undo 撤销一次 如下图所示 光标还是在 第1行第1列 按下P 注意此处是 大写P P 粘贴 新粘贴的代码 在光标位置上方 如红框所示 再P 再 在上面...一个word 数字n G 跳转到第n行 报错告诉我们 line 128 有问题 我们直接跳转到位置 万行 代码 我们 来去自如 梦醒时分 圆梦了之后 感觉 有点空虚 梦 还是要醒的 撤销...undo回来 按一下u 相当于 撤销一步 撤多了 的话 ctrl+r可以重做 redo 取消 撤销操作 回到最初 又回到 最初 6行的 样子 梦醒之后 进行 我们的修改 总结...向前移动光标一个word b 向后移动光标一个word :r oeasy.py 读取文件到当前文件缓存 ggyG 从头复制到尾 :reg 观察寄存器状态 p 在当前位置下方粘贴 P 在当前位置上方粘贴 u 撤销...ctrl+r 重做 可以把这六行 修改为 Guido的六个工作 吗?

9110

前端图形学实战: 100行代码实现几何画板的撤销重做等功能(vue3 + vite版)

, 接下来我将带大家介绍一下市面上常用的几种撤销重做的实现方案以及撤销重做功能底层的实用价值。...你将收获 撤销重做的实现思路 vue 和 react 框架下的撤销重做库介绍 从零实现几何画板的撤销重做功能 挖掘 撤销重做 的扩展场景 demo演示 技术实现 在实现撤销重做功能之前, 我们需要先理清设计思路...实现思路 分析了几种撤销重做的场景后我总结出如下几个要点: 支持基础的撤销重做能力(取消和恢复用户操作的能力) 需要限制最大可操作记录数(防止历史记录数过大导致前端性能问题) 操作记录的当前索引(方便做更可控的撤销重做控制...) 在撤销的过程中发生的任何改动, 都会清空当前步骤之后的所有记录 操作历史持久化(可选, 即是否需要在用户刷新页面之后仍然保留操作记录历史) 为了让大家更好的理解这些要点,我画了一个 撤销重做 过程的流程图..., 我们就开始来一步步实现撤销重做功能。

66010

模拟风粒子效果(​Windy-js

我使用 JavaScript 编写了一个脚本,模拟风的粒子效果。这个脚本不仅能够展示风的流动,还可以通过风向和风力参数来改变粒子的运动方向和速度。...1、定义画布 2、引用脚本 3、使用 // 测试,更改这些值以调整风向和强度...windyanimate(windAngle, windStrength);// 调用粒子动画方法 可以根据天气预报接口,动态改变 windyanimate(windAngle, windStrength)方法的参数,模拟真实风场效果...这个 JavaScript 脚本已经能够较为真实地模拟天气预报中的风效果。你可以自由调整风向和风力参数,观察粒子随之产生的变化。如果你在自己的项目中需要实现类似的功能,不妨尝试一下这个脚本。...详细代码和使用说明,请访问我的GitHub仓库:https://github.com/fiyo/windy-js。 希望这个工具能对你的项目有所帮助!

19900

模拟实现 new 操作符(js)

js 不是基于 class 这种静态类模式,而是基于原型对象的模式。 所以,在 js 中,new 操作符,其实可以通俗的理解成一个辅助工具,用来辅助函数构造出一个新对象。...所以,我们才能够来模拟实现它,因为它其实通俗理解,就是一个工具函数。 得先明确这点,才能知道,的确是可以模拟 new 操作符的。...以上这种场景的 new 操作符其实就是做了几件事: 创建一个继承自 A.prototype 的空对象 让空对象作为函数 A 的上下文,并调用 A 返回这个空对象 这是基本的 new 使用的场景,那么我们要来模拟实现的话...new 操作符的所有职责或者说所有使用场景覆盖了: 用户定义的对象类型 ==> 当构造函数有返回值时 具有构造函数的内置对象 ==> 当前函数可用来作为构造函数,那么返回内部创建的新对象 所以,要完整模拟一个...没错,从引擎角度来看,的确是这样处理,但这些内部属性我们并没有办法看到的啊,那对于我们这些写 js 的来说,如何判断一个函数是否能够作为构造函数呢?靠经验积累?

3.5K10

Node.js股票模拟交易后台

我曾经花了一周时间开发了一个股票模拟交易后台程序,使用Node.js。代码量很少,能完成基本功能。下面给大家介绍一下其实现步骤。...模拟交易采用更简单的即时成交机制,只要符合条件,订单立即成交。 这个后台程序一共就两个js文件,一个用于处理成交,即判断成交条件,写数据库。另一个处理其他逻辑。...这个后台程序以一个node.js进程的方式运行,一个10秒一次的定时器执行成交判断。(真实交易所的撮合器也是10秒钟一次) 此外有一个WebAPI Server接受来自客户端的请求。...佣金字段用于模拟交易的手续费和税费。可用资金字段是,当用户挂单的时候有一部分资金处于冻结状态,可用资金就是去除冻结资金的金额。...额外津贴记录表(记录除权,除息) 资金记录表(记录特殊资金变动) 仓位表 - 仓位记录表(记录仓位变化) 做空仓位记录表 排行榜 挂单 挂单的核心就是向数据库插入一条记录,不过即便是简洁的js

2.9K30

简易理解设计模式之:备忘录模式——Word文档的工作原理

如果有需要提供撤销和恢复操作的需求,可以考虑使用备忘录模式,比如:数据库备份与还原、编辑器撤销重做、游戏存档、Git版本管理等。...例子: 我们使用Word文档编辑,首先写完一篇文章,点完保存的操作才能顺利保存文本内容,下面我们模拟一下这个逻辑: 需求:模拟Word文档的业务 1、普通方法(第一版代码) 1.1、定好架构 首先用逆向思维大概构想这个功能...而备忘录角色的存储属于临时存储,也就是某一个过渡的状态,相当于点击了“撤销”和“重做”按钮。...理解上,这种撤销重做的功能并不需要关掉Word后再重新打开,也没必要存到本地磁盘中。...撤销操作,文本内容为:今天天气真好 撤销操作,文本内容为:今天天气 重做操作,文本内容为:今天天气真好 重做操作,文本内容为:今天天气真好,出去逛逛!

57710

开源项目不应参与政治,Node.js 和 OpenJS 官网已撤销声明!

2022 年 3 月 1 日,本周二,Node.js 官方合并了一个 PR#4450[1],翻译为 "我们与乌克兰人民站在一起。我们鼓励同情和对和平的希望。...image.png 之后该事件在社区不断发酵,以至于有出现要抵制 Node.js 的评论,当时看到的第一想法是有点失望的 “为什么开源项目要参与政治?”...image.png 在 2022 年 3 月 3 日,本周三,Node.js 官网已撤销该声明(PR#4467[2] 可以看到),从 reaction 点赞行为看还是得到了大多数人的认可,翻译大意为 “...image.png 其实 Node.js 最后这个处理结果还是可以的。在 Node.js 官网取消这一横幅时,同时看了 OpenJS 基金会官网也没有了横幅声明。...OpenJS 基金会是 Node.js 基金会与 JavaScript 基金会在 2019 年 3 月合并后的一个新组织,里面包含众多前端开源项目。

1.9K30

【数据结构和算法】小行星碰撞

文本编辑器中的撤销/重做功能:许多文本编辑器使用撤销/重做功能来允许用户撤销他们最近所做的更改。这些功能通常使用一个操作栈,每个操作(例如插入或删除文本)都被压入栈。...用户可以多次撤销,每次撤销都从栈中弹出并反转一个操作。 解析语法:在编译原理中,栈被广泛用于解析语法。例如,在解析一个算术表达式时,你可以使用栈来保持追踪括号和操作符的优先级。...2.2 方法一:模拟 + 栈 思路与算法: 由于碰撞抵消总是从相邻行星之间发生,我们可以使用「栈」来模拟该过程。...三、代码 3.1 方法一:模拟 + 栈 Java版本: class Solution { public static int[] asteroidCollision(int[] asteroids...{ asteroids := []int{5, 10, -5} fmt.Println(asteroidCollision(asteroids)) } 四、复杂度分析 4.1 方法一:模拟

13910
领券