FabricJS:始终在画布上居中对象

新手上路,请多包涵

是否可以始终将对象放在 fabricjs 画布上?

背景:我正在构建一个网络工具,可以使用 fabricjs 轻松创建复杂的动画。我希望能够将画布大小的宽度和高度都设置为 100%。因此,我想将所有对象放在中心并为其添加 X/Y 偏移量。当我稍后调整画布大小时,我可以使用 x/y 偏移从中心重新调整对象。

有这样的内置功能吗?或者我应该简单地向对象添加一个属性,如果画布正在调整大小 - 检查该属性的所有对象并重新调整对象从新画布中心的位置?

问候和感谢罗伯特

原文由 Robert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Fabric 对象有以下居中方法:

 obj.center();  // Centers object vertically and horizontally on canvas to which is was added last
obj.centerV(); // Centers object vertically on canvas to which it was added last
obj.centerH(); // Centers object horizontally on canvas to which it was added last

我在文档中没有看到任何关于偏移量的信息。

像下面这样的东西可能会起作用

var canvas = new fabric.Canvas('c');

$(window).resize(function(){

     var w = $(window).width();
     var h = $(window).height();
     var center = {x:w / 2, y:h / 2);

     canvas.setDimensions({width:w,height:h});
     canvas.forEachObject(function(obj){

        obj.set({
            left : center.x + obj.offsetLeft,
            top : center.y + + obj.offsetTop,
        });

        obj.setCoords();

    });

// need to call calcOffset whenever the canvas resizes
canvas.calcOffset();
canvas.renderAll();

});

原文由 cyberpantz 发布,翻译遵循 CC BY-SA 3.0 许可协议

或者你可以像这样将对象居中

    // add the image object
    Canvas.add(oImg)
    // set the object to be centered to the Canvas
    Canvas.centerObject(oImg);

    Canvas.setActiveObject(oImg);
    Canvas.renderAll();

原文由 Darryl Hebbes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题