在FabricJS中转换视口时,边界对象错误,用户单击对象时无法选择对象

时间:2018-10-06 08:03:58

标签: css3 html5-canvas fabricjs fabricjs2


请帮我解决这个问题。
1.我在以下位置显示了文字:左:10,上:10。
2.使用viewportTransform将viewPort移至新位置:X轴100和Y轴100平移
3.文本对象移到新位置

预期:
用户可以通过单击文本对象(“ hello world”)来选择文本对象(“ hello world”)。

实际:
第一次,用户无法单击文本对象。 &对象边界仍在旧位置(左:10,上:10)。 (请参阅附件图像)
请检查我的演示代码。
我正在使用Fabricjs 2.4.0版本的此演示

如何解决这个问题?
谢谢 !

Wrong cursor position

var canvasObject = document.getElementById("editorCanvas");
  // set canvas equal size with div
  $(canvasObject).width($("#canvasContainer").width());
  $(canvasObject).height($("#canvasContainer").height());
 
 canvas = new fabric.Canvas('editorCanvas', {
    backgroundColor: 'white',
    selectionLineWidth: 2,
    width: $("#canvasContainer").width(),
    height: $("#canvasContainer").height()
  });

  canvas.controlsAboveOverlay = true;

  // Add a text to canvas
  var text = new fabric.Text('hello world', { left: 10, top: 10 });
  canvas.add(text);
  
  // Transform View
  canvas.viewportTransform[4] = 100;
  canvas.viewportTransform[5] = 100;
  canvas.requestRenderAll();
#canvasContainer {
            width: 100%;
            height: 100vh;
            background-color: gray;
        }
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.0/fabric.js"></script>


<div id="canvasContainer">
  <canvas id="editorCanvas"></canvas>
</div>

1 个答案:

答案 0 :(得分:1)

调用object.setCoords(),它将在更改后设置边界坐标。然后检查When-to-call-setCoords

演示

var canvasObject = document.getElementById("editorCanvas");
// set canvas equal size with div
$(canvasObject).width($("#canvasContainer").width());
$(canvasObject).height($("#canvasContainer").height());

canvas = new fabric.Canvas('editorCanvas', {
  backgroundColor: 'white',
  selectionLineWidth: 2,
  width: $("#canvasContainer").width(),
  height: $("#canvasContainer").height()
});

canvas.controlsAboveOverlay = true;

// Add a text to canvas
var text = new fabric.Text('hello world', {
  left: 10,
  top: 10
});
canvas.add(text);

// Transform View
canvas.viewportTransform[4] = 100;
canvas.viewportTransform[5] = 100;
setObjectCoords();
canvas.requestRenderAll();

function setObjectCoords(){
  canvas.forEachObject(function(object){
    object.setCoords();
  })
}
#canvasContainer {
  width: 100%;
  height: 100vh;
  background-color: gray;
}
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.0/fabric.js"></script>


<div id="canvasContainer">
  <canvas id="editorCanvas"></canvas>
</div>