你能帮我弄清楚这里发生了什么吗?
基本上我想将 FabricJS 与 ReactJS 和 Redux 一起使用。我想将当前选择的对象存储在 redux 存储中。但是在保存多选的活动对象时,它似乎有一种奇怪的行为。
let selectedObjects = null;
let canvas = new fabric.Canvas('canvas-area', {
preserveObjectStacking: true,
width: 500,
height: 500
});
canvas.add(new fabric.Rect({
left: 100,
top: 100,
fill: 'blue',
width: 100,
height: 100
}));
canvas.add(new fabric.Circle({
radius: 50,
fill: 'green',
left: 200,
top: 200
}));
canvas.renderAll();
// =======================
document.querySelector('#save-selection').addEventListener('click', ()=> {
//selectedObjects = Object.assign({}, canvas.getActiveObject());
selectedObjects = canvas.getActiveObject();
canvas.discardActiveObject();
canvas.renderAll();
});
document.querySelector('#apply-saved-selection').addEventListener('click', ()=> {
canvas.setActiveObject(selectedObjects);
canvas.renderAll();
});
<html>
<body>
<button id='save-selection'>Save Selection</button>
<button id='apply-saved-selection'>Apply Saved Selection</button>
<canvas id='canvas-area'></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.3.3/fabric.min.js"></script>
</body>
</html>
基本上你使用上面的代码片段的方式是:
用例 1:单个选定对象
- 选择单个对象。
- 单击保存选择(它将保存当前选定的对象并清除当前画布选择)。
- 单击应用保存的选择。
- 拖动当前选定的对象,选择和选定的对象保持同步,应用程序按预期工作。
用例 2:多选
- 选择多个对象。
- 单击保存选择。
- 单击应用保存的选择。
- 拖动当前选中的对象,可以看到,只有选中的对象被拖动,实际选中的对象被留下(不同步)。
您能帮我弄清楚如何正确保存所选对象以供以后使用吗?
提前致谢
注意:我使用的是最新的 FabricJS (2.3.3)