1

我有一个带有画布区域的页面(与 HTML5 无关),人们可以在其中通过拖动照片来创建“艺术”,创建他们可以拖动、拉伸、着色等的 div。等等。画布 div 在里面画布容器 div。现在我想实现一个 UNDO 选项。我的想法是做一个

                        canvasBackup$ = $('#canvas').clone();

当操作开始时,例如在每个 dragStart 事件中,以及在操作结束时,如果使用 Ctrl-Z 请求 UNDO,将执行

                       $('#canvas').remove();
                       canvasBackup$.appendTo($('#canvasContainer');

我担心的是,随着页面的增长并开始减慢页面的响应速度,克隆,也许还有追加,可能会有点计算密集型。我想这取决于 jQuery 如何进行克隆。如果它只是从 DOM 中断开该部分并直接进行内存复制,那应该还不错。但是,如果有大量的计算和构建,它可能是一个问题。

有没有人觉得这是否是实施 UNDO 的合理方法?

谢谢

4

1 回答 1

1

几乎你所做的每一个 DOM 修改都会触发所谓的回流

在重排期间,浏览器会重新计算每个元素的位置。

如果您的 DOM 包含大量元素和复杂的嵌套结构,则重排开始需要更多时间。

尽量减少对 DOM 的修改次数将有助于保持响应速度和速度。

在 javascript 方面,Clone()将克隆一个元素和所有包含的元素。这意味着你的结构越深,它包含的子元素越多,jquery 运行它所调用的元素的层次结构所需的时间就越长。

它越大,速度Clone()就越慢。

于 2013-06-25T09:29:31.117 回答