我遇到了Fabric新版本的问题,如1.4.2
以编程方式更改对象属性后,对象从画布中消失。
对于旧版本,作为1.3.7,所有工作都有效,除非我以编程方式在更改后手动调整大小。在这种情况下,对象也会消失)
我有一些输入控件(类型编号)来设置属性,我在这些输入控件中观察onchange事件。更改时调用函数:
function cambiarobjeto()
{
numero=damecapa(); //(I have some canvas in some divs, this function give me what is active canvas at this moment)
var canvasactivo=canvaslist[numero]; //(I assign the active canvas to a variable).
var objetico=0;
if (canvasactivo.getActiveObject())
{
//(I assign the active object to a variable)
objetico=canvasactivo.getActiveObject();
}
if (objetico!=0)
{
//(I observer if input controls are not null and are correct. If aren´t, I set the value to actual parameter of the canvas active object)
if ($('#manual_posicionx').val()=='' || isNaN($('#manual_posicionx').val())) {$('#manual_posicionx').val(objetico.left);}
if ($('#manual_posiciony').val()=='' || isNaN($('#manual_posiciony').val())) {$('#manual_posiciony').val(objetico.top);}
if ($('#manual_anchura').val()=='' || isNaN($('#manual_anchura').val())) {$('#manual_anchura').val(objetico.width*objetico.scaleX);}
if ($('#manual_altura').val()=='' || isNaN($('#manual_altura').val())) {$('#manual_altura').val(objetico.height*objetico.scaleY);}
if ($('#manual_angulo').val()=='' || isNaN($('#manual_angulo').val())) {$('#manual_angulo').val(objetico.angle);}
if ($('#manual_angulo').val()<0 ) {$('#manual_angulo').val(0);}
if ($('#manual_angulo').val()>359) {$('#manual_angulo').val(359);}
//(Assing input values to variables. If don´t do this, object set doesn´t works)
var x=$('#manual_posicionx').val(),
y=$('#manual_posiciony').val(),
w=$('#manual_anchura').val(),
h=$('#manual_altura').val(),
a=$('#manual_angulo').val();
ww=objetico.width;
hh=objetico.height;
//(Set object properties with the inputs values)
//OPTION 1 (doesn´t works)
objetico.set(
{
left: x,
top: y,
scaleX: w/ww,
scaleY: h/hh,
angle: a,
});
//OPTION 2 (doesn´t works)
objetico.left=x;
objetico.top=y;
objetico.scaleX=w/ww;
objetico.scaleY=h/hh;
objetico.angle=a;
//(And finally do object setcoords, render canvas and calcoffset)
objetico.setCoords();
canvasactivo.renderAll();
canvasactivo.calcOffset();
}
}
有人可以帮助我吗?
感谢。
答案 0 :(得分:2)
尝试删除角度后的逗号:a在对象中。或者,您可以尝试使用
单独设置每个参数objectio.set('left', x);
objectio.set('top', y);
等等。您可以做的另一件事是对要设置的所有值进行类型检查,以查看是否所有值都是int类型而不是字符串。我有同样的问题,并意识到我设置的值之一是一个字符串。
希望这会有所帮助。
答案 1 :(得分:1)
非常感谢Benick。
问题不在于set方法,而是在分配给他的值中,因为如你所说,被视为字符串而不是整数。
解决方案很简单,将var assignemet代码更改为:
var x=parseInt($('#manual_posicionx').val()),
y=parseInt($('#manual_posiciony').val()),
w=parseInt($('#manual_anchura').val()),
h=parseInt($('#manual_altura').val()),
a=parseInt($('#manual_angulo').val());
它有效。
但是,在这种结构的旧版本中使用字符串值正常工作很奇怪
再次感谢!