实施撤消和重做功能的JavaScript和PHP

我想要实现撤销和重做功能,不仅为客户端,但是对于服务器端也是如此。 对于insatnce我有一个包含分区的形象和我可以旋转调整大小和重写,所有图像生成的基本操作。 而且所有的操作更新DATABSE和形象。 你可以说我的形象被再生,数据库每一个动作后更新。

现在,我需要实现撤消和重做功能。 我做了一些研究,以及。 我需要的是如何实现所需的任务的最佳方法。 我想,以保持每个动作“日志类型的东西”,或者数据库或JavaScript数组包括HTML或者还有什么处理呢?

什么是实现我的目标的最佳途径。

谢谢,

--------------解决方案-------------

在一个基本水平,你需要两样东西:

  • 一个操作栈(阵列),其跟踪已执行的操作的。 当用户执行一个操作,则创建一个描述该操作的对象,并把它添加到阵列。 当用户点击取消,可以从数组中删除的最后一个项目。
  • 每个操作类型需要一个“保存”方法和“撤消”方法。 一些“撤消”方法类似于他们的“拯救”的方法这可能很麻烦(即撤消水平翻转你只是做另一个翻转),​​而其他人没有这样的对称性(即撤消你必须作物存储图像数据,因为这是发生在作物之前)。

如果你想“重做”功能,那么你需要第二次手术栈。 每一个操作撤消时,你将它添加到重做堆栈的结束。 如果用户点击“重做”,然后你再移回操作栈。

它可以帮助寻找到命令模式(http://en.wikipedia.org/wiki/Command_pattern),因为这往往是用来实现撤销。

我的javascript撤消管理器使用命令模式。 基本上,每个动作,你还实现了撤消操作和重做动作。 你可以建立相同的功能服务器端。

https://github.com/ArthurClemens/Javascript-Undo-Manager

这是命令模式的一个清晰的代码示例:https://github.com/shichuan/javascript-patterns/blob/master/design-patterns/command.html

分类:php 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.745 (s). 10 q(s)