以编程方式移动对象后,Fabric js 对象边界不会更新

Fabric js object boudaries won't update after object moved programmatically

有一些对象(例如矩形),当我使用 js 更改它的位置时,我无法将它从新位置拖动,只能从旧位置拖动。 下面有例子。按 "MOVE" 移动对象,然后尝试拖动它。如果你尝试它不会拖动,但如果你拖动他的旧位置它会。

var c = new fabric.Canvas('c');
c.add(new fabric.Rect({
 left: 0,
  top: 0,
  width: 40,
  height: 40,
  fill: 'red'
}));

$('#init').click(function() {
 c.item(0).setLeft(0);
  c.item(0).setTop(0);
  c.renderAll();
});

$('#move').click(function() {
 c.item(0).setLeft(100);
  c.item(0).setTop(100);
  c.renderAll();
});
#c {
  outline: 2px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.12/fabric.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="c" width="200" height="200"></canvas>
<button id="init">
INIT
</button>
<button id="move">
MOVE
</button>

出现此问题是因为,您没有在更改对象控件坐标后更新它位置。

您需要调用对象上的.setCoords()方法来更新它相应地控制坐标。

ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ

var c = new fabric.Canvas('c');
c.add(new fabric.Rect({
   left: 0,
   top: 0,
   width: 40,
   height: 40,
   fill: 'red'
}));

$('#init').click(function() {
   c.item(0).setLeft(0);
   c.item(0).setTop(0);
   c.item(0).setCoords(); //<-- call this
   c.renderAll();
});

$('#move').click(function() {
   c.item(0).setLeft(100);
   c.item(0).setTop(100);
   c.item(0).setCoords(); //<-- call this
   c.renderAll();
});
#c{outline: 1px solid #ccc}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.12/fabric.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="c" width="180" height="180"></canvas>
<button id="init">
   INIT
</button>
<button id="move">
   MOVE
</button>