画布增加的新功能
This commit is contained in:
50
src/component/Canvas/CanvasEditor/commands/ObjectCommands.js
Normal file
50
src/component/Canvas/CanvasEditor/commands/ObjectCommands.js
Normal file
@@ -0,0 +1,50 @@
|
||||
import { Command } from "./Command.js";
|
||||
|
||||
/**
|
||||
* 对象移动命令
|
||||
* 轻量级命令,只记录对象的移动属性变化(位置)
|
||||
*/
|
||||
export class ObjectMoveCommand extends Command {
|
||||
constructor(options) {
|
||||
super({
|
||||
name: options.name || "对象移动",
|
||||
description: options.description || "移动对象",
|
||||
saveState: false, // 自己管理状态,避免递归
|
||||
});
|
||||
|
||||
this.canvas = options.canvas;
|
||||
this.initPos = options.initPos;
|
||||
this.finalPos = options.finalPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行命令
|
||||
*/
|
||||
async execute() {
|
||||
this.setObjectsPos(this.finalPos);
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* 撤销命令
|
||||
* 应用初始状态
|
||||
*/
|
||||
async undo() {
|
||||
this.setObjectsPos(this.initPos);
|
||||
return true;
|
||||
}
|
||||
|
||||
async setObjectsPos(pos) {
|
||||
const objects = this.canvas.getObjects();
|
||||
const arr = typeof pos === "object" ? [pos] : pos;
|
||||
arr.forEach((item) => {
|
||||
const obj = objects.find((o) => o.id === item.id);
|
||||
if(obj) {
|
||||
obj.set({
|
||||
left: item.left,
|
||||
top: item.top,
|
||||
});
|
||||
}
|
||||
});
|
||||
this.canvas.renderAll();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user