撤销与重做
diy.js作为一个业务级图形库,自带了完整的撤销与重做功能。
介绍
diy.js提供了一些撤销与重做相关的基础API:
javascript
/* 存储可撤销数据的对象 */
const z = stage.z;
/* 存储可重做数据的对象 */
const z = stage.y;
/* 记录当前所有素材状态,到可撤销的数据对象 */
stage.r();
/* 导出代表当前所有素材状态的快照,但不进行记录 */
const snap = stage.snap();
/* 导入素材状态 */
stage.alter(snap);
/* 导出代表当前舞台状态的快照 */
const snap = stage.snap(true);
/* 将舞台替换为指定状态 */
stage.alter(snap, true);
/* 手动记录 */
stage.r(snap);
/* 撤销 */
stage.undo();
/* 重做 */
stage.redo();
/* 清空所有快照数据 */
stage.clearSnap();
/* 监听快照变化 */
stage.on('snapTest', (e) => {
console.log(e);
})
举例
一些不会触发舞台事件的场景需要主动保存快照,比如:
javascript
/* 获取被激活的图形 */
const active = stage.getActive();
/* 调整 */
if (active && active.canFlip) {
/* 记录快照 */
stage.r();
/* 按Y轴翻转图形 */
active.flipY();
}
/* 撤销,恢复到未翻转前的状态 */
stage.undo();
/* 重做,恢复到翻转后的状态 */
stage.redo();
大部分场景都可以通过舞台事件来实现自动记录:
javascript
/* 改变图层、移除图形、复制图形 */
stage.on(['before-sort', 'before-add', 'before-delete', 'before-copy'], () => {
stage.r();
});
在线演示
你可以访问我们的演示案例来体验DIY.JS的功能。