调整画布和对象的尺寸错误进行顶部计算

时间:2019-03-12 15:52:35

标签: javascript fabricjs fabricjs2

我正在尝试调整画布及其中所有对象的大小。 加载Json并设置画布的主要宽度和高度后,我只是尝试调整画布的大小。 调整画布和对象的大小后,某些对象不遵守最高值(或者不是通过我的函数计算得出的)。

我在fabricjs 1.7.7上奔跑

var j      = JSON.parse(json);
setTimeout(function(){
        canvas.loadFromDatalessJSON(JSON.stringify(j), canvas.renderAll.bind(canvas), function(o, object){
    });
    setTimeout(function(){
            var newWidth    =   500;
        if (canvas.width != newWidth) {
          var scaleMultiplier = newWidth / canvas.width;
          var objects = canvas.getObjects();
          var factorX = newWidth / canvas.getWidth();
          var factorY = newWidth / canvas.getHeight();
          for (var i in objects) {
              objects[i].scaleX = objects[i].scaleX;
              objects[i].scaleY = objects[i].scaleY;
              objects[i].left = factorX * objects[i].left;
              objects[i].top = factorY * objects[i].top ;
              objects[i].setCoords();
          };

          canvas.setWidth(canvas.getWidth() * factorX);
          canvas.setHeight(canvas.getHeight() * factorY);
          canvas.renderAll();
          canvas.calcOffset();
      };
    }, 3000);
}, 2000);

这里是小提琴:http://jsfiddle.net/W3b3r/3stbg75d/

(在这个小提琴中,有些超时首先显示load json的结果,然后显示resize的结果) 在这种情况下,调整大小后,我得到了一些位置不同的元素。

我也只尝试了命令centerH()而不进行缩放,但是结果是一样的,我从视口中得到了一些图片。

先谢谢了。 最好。

1 个答案:

答案 0 :(得分:1)

这是一个解决方案: http://jsfiddle.net/6eb2skx7/1/ 您需要将object.scaleXobject.scaleY乘以factorX