如何在选择中创建单个对象的宽度,高度,左侧和顶部:创建事件?

时间:2016-01-27 18:50:10

标签: fabricjs

我正在使用此函数缩放/移动对象时获取对象属性的值(top,width ...):

canvas.on('object:scaling', onObjectModification);
canvas.on('object:moving', onObjectModification);
canvas.on('object:rotating', onObjectModification);
function onObjectModification(e) {
    var activeObject = e.target;
    var reachedLimit = false;
    objectLeft = activeObject.left,
    objectTop = activeObject.top,
    objectWidth = activeObject.width,
    objectHeight = activeObject.height,
    canvasWidth = canvas.width,
    canvasHeight = canvas.height;
}

如何为作为一组移动的每个对象获得相同的内容?我需要随着对象:缩放事件提供而不断变化的值。

我知道事件选择:已创建,但我迷失了如何使用它来实现我想要的东西。你们的任何帮助都将受到高度赞赏。 感谢

1 个答案:

答案 0 :(得分:5)

在对象缩放期间,宽度和高度不会改变。它们将一直相同,只是scaleX和scaleY会改变。

你必须编写一个函数来迭代可能的组子对象。

canvas.on('object:scaling', onObjectModification);
canvas.on('object:moving', onObjectModification);
canvas.on('object:rotating', onObjectModification);
function onObjectModification(e) {
    var activeObject = e.target;
    if (!activeObject) {
      return;
    }
    var canvasWidth = canvas.width;
    var canvasHeight = canvas.height;
    var reachedLimit = false;
    var objectLeft = activeObject.left;
    var objectTop = activeObject.top;
// this provide scaled height and width
    var objectWidth = activeObject.getWidth();
    var objectHeight = activeObject.getHeight();
    if (activeObject._objects) {
        objs = activeObject._objects;
        for (var i= 0; i < objs.length; i++) {
            var obj = objs[i];
            var objWidth = activeObject.getWidth() * activeObject.scaleX;
            var objHeight = activeObject.getHeight() * activeObject.scaleY;  
        }
    }
}