第一种:
单独保存每个元素(vue3中):
let objects = this.canvas.getObjects();
objects = objects.map((item) => {
return toRaw(item).toJSON();
});
this.$store.commit("setCanvasObjects", objects );
关键方法是toJSON()
还原时,要这么做:
this.canvas.clear();
this.canvasObjects.forEach((item) => {
new fabric.Text.fromObject(item, (e) => {
toRaw(this.canvas).add(e);
});
});
this.canvas.renderAll();
其中不只是Text,其他fabric对象也可以,关键是和item类型对应。
缺点:如果进行了批量操作,如批量移动,缩放。还原后位置可能不对,这是fabric的bug。