我在模态窗口中有一个Fabric画布,可以由用户调整大小。要调整画布大小,我使用canvas.setDimensions({width:w, height:h});
从模态大小中取w
和h
。
调整画布大小时,对于画布中的每个对象,我会按比例更改其大小和位置。我使用原始和新的画布大小计算要应用于每个对象的top/left/width/height
的因子。每次调整画布大小时都会运行此代码:
canvas.getObjects().map(function(o) {
// calculate factors
var factorW = (newCanvasDim.width/o.data.canvasW);
var factorH = (newCanvasDim.height/o.data.canvasH)
// calculate new position
var left = o.data.origL * factorW;
var top = o.data.origT * factorH;
o.setLeft(left);
o.setTop(top);
// calculate new size
var width = o.data.origW * factorW;
var height = o.data.origH * factorH;
o.setWidth(width);
o.setHeight(height);
canvas.renderAll();
canvas.calcOffset();
});
调整大小正常,所有对象都正确地改变了它们的尺寸。问题是在调整画布大小后大多数对象都无法选择。此外,单击画布的空白区域有时会选择对象。
我在更改每个对象属性后尝试使用canvas.calcOffset();
(请参阅上面的代码),但它没有帮助。任何想法如何解决这个问题?