fabricjs:通过boundingbox移动对象

时间:2016-12-16 05:34:15

标签: fabricjs

我是fabricjs的新手。

这可以通过边界框移动对象吗?

类似的东西:

object.boundingBox.left=10;

或类似的方法:

object.setBoundingBox("left",30);

3 个答案:

答案 0 :(得分:2)

Fabric中没有这样的东西,但你可以添加自己的getBoundingBox函数:

fabric.util.object.extend(fabric.Object.prototype, {
  setBoundingBox: function(prop, val) {
    var bbox = this.getBoundingRect();
    this.set(prop, (this[prop] - bbox[prop]) + val);
    this.setCoords();
  }
}); 

并像这样使用它:

object.setBoundingBox("left",30);

答案 1 :(得分:0)

没有可以使用boundingRect设置左侧的属性,但您可以使用下面的代码。它将根据boundingRect设置对象的位置。您也可以通过在此代码中将left替换为top来执行相同的顶部位置。

var  left = 10 + Math.abs(object.left - object.getBoundingRect().left )
object.left = left ;

祝你好运:)

答案 2 :(得分:0)

我编写了一个限制对象移动到边界框的函数:

function limitObjMovement(rectBox, obj) {
  if ( rectBox.getLeft() <= obj.getLeft() ) {
    rectBox.setLeft( obj.getLeft() );
  }
  else if ( rectBox.getLeft() + rectBox.getWidth() >= obj.getLeft() + obj.getWidth() ) {
    rectBox.setLeft( obj.getLeft() + ( obj.getWidth() - rectBox.getWidth() ) );
  }
  if ( rectBox.getTop() <= obj.getTop() ) {
    rectBox.setTop( obj.getTop() );
  }
  else if ( rectBox.getTop() + rectBox.getHeight() >= obj.getTop() + obj.getHeight() ) {
    rectBox.setTop( obj.getTop() + ( obj.getHeight() - rectBox.getHeight() ) );
  }
}

canvas.on("object:moving", function() {
  limitObjMovement(boundingBoxObj, movingObj);
});