【问题标题】:Fabric.js: Initial position object outside canvas no longer workingFabric.js:画布外的初始位置对象不再工作
【发布时间】:2018-08-24 14:14:04
【问题描述】:

最近我开始使用较新版本的 Fabric.js(从 1.7.22 到 2.3.5)。我必须对现有代码进行一些对我来说似乎合乎逻辑的修改。但是,我注意到您不能再将对象放在画布之外,以便稍后将其重新定位到画布上。就像下面的代码一样。它不会显示。我的问题是:这是否因某种原因而改变,或者这是一个问题(错误)?除了推迟将对象添加到画布或使用visible 属性之外,我还有其他选择吗?

$( document ).ready(() => {
  const canvas = new fabric.Canvas('canvas');
  var rect = new fabric.Rect({
        left: 301,	  		
        top: 10,
        originX: 'left',
        originY: 'top',	
        width: 50,
        height: 50,
        fill: '#336699'
    });
    
  canvas.add(rect);						
  rect.set({"left": 10});
  rect.set({"top": 10});
  canvas.renderAll();
});
canvas {
  border: 1px solid tomato;
}
<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.3.5/fabric.min.js"></script>
<canvas id="canvas" width="300" height="100"></canvas>

【问题讨论】:

    标签: fabricjs


    【解决方案1】:

    重新定位后需要使用setCoords()

    $( document ).ready(() => {
      const canvas = new fabric.Canvas('canvas');
      var rect = new fabric.Rect({
            left: 301,	  		
            top: 10,
            originX: 'left',
            originY: 'top',	
            width: 50,
            height: 50,
            fill: '#336699'
        });
        
      canvas.add(rect);						
      rect.set({"left": 10});
      rect.set({"top": 10});
      rect.setCoords();
      canvas.renderAll();
    });
    canvas {
      border: 1px solid tomato;
    }
    <script
      src="https://code.jquery.com/jquery-3.3.1.min.js"
      integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
      crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.3.5/fabric.min.js"></script>
    <canvas id="canvas" width="300" height="100"></canvas>

    【讨论】:

    • 谢谢,这正是我所需要的。但是,这提出了一个问题:重新定位后我是否总是需要setCoords()?因为我之前注意到最初放置在(内部)画布上的对象不需要它。也就是说,每次都需要用setCoords()有什么用呢?
    • @Durga:同时我也找到了那个页面。但问题仍然是为什么 fabric.js 不是每次都自己处理这个方法。
    • @esims,没有必要一直为组中的对象调用 setCoords,因为组正在处理。并在移动物体时设置位置。因此需要在必要时调用。
    • 好的,我明白了。谢谢。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2015-04-02
    • 2016-12-21
    • 2013-02-08
    • 2018-12-12
    • 1970-01-01
    • 2013-11-28
    • 2019-09-13
    相关资源
    最近更新 更多