php - 实现撤消和重做功能 javascript 和 php

标签 php javascript undo redo

我不仅要为客户端而且要为服务器端实现撤消和重做功能。对于insatnce,我有一个包含图像的div,我可以旋转调整大小并重写它,图像生成的所有基本操作。并且所有操作都会更新数据库和图像。你可以说我的图像正在重新生成,并且数据库在每次操作后都会更新。

现在我需要实现撤消和重做功能。我也做了一些研究。我需要的是如何实现所需任务的最佳方法。我正在考虑维护每个操作“日志类型的东西”或使用数据库或使用 javascript 数组(包括 HTML 或其他什么)来处理它??

实现我的目标的最佳方法是什么。

谢谢,

最佳答案

在基本层面上,您需要两件事:

  • 一个操作堆栈(数组),用于跟踪已执行的操作。当用户执行操作时,您创建一个描述该操作的对象并将其添加到数组中。当用户点击撤消时,您可以从数组中删除最后一项。

  • 每个操作类型都需要一个“保存”方法和一个“撤消”方法。这可能会变得很棘手,因为一些“撤消”方法类似于它们的“保存”方法(即撤消水平翻转,您只需执行另一个翻转),而其他方法则没有这种对称性(即撤消裁剪,您必须存储裁剪前的图像数据)。

如果您想要“重做”功能,那么您需要第二个操作堆栈。每次撤消操作时,您都会将其添加到重做堆栈的末尾。如果用户点击“重做”,则您将其再次移回操作堆栈。

查看命令模式 (http://en.wikipedia.org/wiki/Command_pattern) 可能会有所帮助,因为它通常用于实现撤消。

关于php - 实现撤消和重做功能 javascript 和 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837387/

相关文章:

PHP - 根据给定变量计算颜色(十六进制)

php - SELECT查询, ""为空时WHERE全选

vba - Excel VB 错误 Application.Undo & ActiveSheet.Protect

c# - 使用下拉菜单在两个页面之间切换

javascript - jQuery - 在 html 表中插入新行的问题

cocoa - 如何判断哪个 NSTextField 被编辑了?

iphone - 如何将 NSUndoManager 与 UIImageView 或 CGContext 一起使用

php - 如果这本书有多个作者,我怎样才能阻止 php 显示两次

php如何获取特定位置的字符串

javascript - 跟踪 JavaScript 中 URL 的重定向路径