【问题标题】:How to force the canvas fabricJS to refresh如何强制画布fabricJS刷新
【发布时间】:2019-09-18 22:39:02
【问题描述】:

我目前使用的是 fabricJS(version 1.4.0) 画布,我有 100 个手动添加到画布上的对象,但是对象仅在我单击画布上的任意位置时出现,有没有办法强制画布自行刷新?如果它可以以某种方式提供帮助,这是我的一种情况。

  ....
 initComplete: function (settings, json) {

   let clients = json;
   if(clients.length !== 0)
   {
       //clients is an array of length 100
       for (client of clients)
        {
             let icone = new Image;
              if (client.ProfileId !== '')
              {

                   //..Codes pour afficher les client wifi sur le canvas
                   client_real_left = (client.MapCoordinate.x * baseWidth) / widthFloor;
                   client_real_top = (client.MapCoordinate.y * baseHeight) / lengthFloor;
                   client_left = client_real_left;
                   client_top = client_real_top;

                   if (client.IconName === 'default.png' || client.IconName === null) {
                        icone.src = '/Icones/wifi.png';
                   }
                   else {
                          icone.src = '/Icones/' + client.IconName;
                        }

                          const wifiClient = new fabric.Image(icone,
                          {

                                    id: client.ProfileId,
                                    class: 'img_wifiClient',
                                    left: (transX + client_left) * canvasFabric.scale,
                                    top: (transY + client_top) * canvasFabric.scale,
                                    selectable: true,
                                    hasBorders: false,
                                    hasControls: false,
                                    padding: 0,
                                    perPixelTargetFind: true,
                                    width: 24,
                                    height: 24,
                                    originX: 'center',
                                    originY: 'center'
                                });


                            canvasFabric.add(wifiClient);

                        }
   } //end if

}

initComplete是jQuery DataTable的回调函数

【问题讨论】:

  • 我正在尝试使用fabric.Image.fromURL,那么如何将img存储在局部变量中?因为我需要在外部函数中使用。再次感谢您的回复
  • 你也可以这样使用:wifiClient.setSrc('src',callback)
  • 怎么样?你能展示一个简单的 sn-p 吗?欣赏

标签: javascript fabricjs


【解决方案1】:

使用image#setSrc 并在回调方法上调用renderAll。

演示

var canvas = new fabric.Canvas('c',{
  width:400,
  height:400
});
var image = new fabric.Image('');
canvas.add(image);

image.setSrc('https://picsum.photos/200/300',function(){
  image.setCoords();
  canvas.renderAll();
})
canvas{
  border:1px solid;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.2.0/fabric.js"></script>
<canvas id='c'></canvas>

【讨论】:

  • 那我需要在添加到canvas之前设置图片的left、top等属性吗?欣赏队友
  • @Xris 你可以像你一样添加属性,或者你可以作为另一个参数传递给setSrc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2013-03-14
  • 1970-01-01
  • 2011-08-24
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多