Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调整fabricjs矩形的宽度/高度属性_Javascript_Fabricjs - Fatal编程技术网

Javascript 调整fabricjs矩形的宽度/高度属性

Javascript 调整fabricjs矩形的宽度/高度属性,javascript,fabricjs,Javascript,Fabricjs,我使用fabric.js定义可以调整大小的矩形区域。我想知道是否有任何方法可以设置fabric,以便它可以通过更改宽度/高度属性而不是scaleX和scaleY来调整元素的大小 您可以使用对象:缩放事件 您应该设置脏标志,它为我解决了大多数问题: canvas.on("object:scaling", function (e) { var target = e.target; if (!target || target.type !== 'rect

我使用fabric.js定义可以调整大小的矩形区域。我想知道是否有任何方法可以设置fabric,以便它可以通过更改宽度/高度属性而不是scaleX和scaleY来调整元素的大小

您可以使用对象:缩放事件


您应该设置脏标志,它为我解决了大多数问题:

canvas.on("object:scaling", function (e) {
            var target = e.target;
            if (!target || target.type !== 'rect') {
                return;
            }
            var sX = target.scaleX;
            var sY = target.scaleY;
            target.width *= sX;
            target.height *= sY;
            target.scaleX = 1;
            target.scaleY = 1;
            target.dirty = true;
        });

谢谢在fabric.js中调整对象的大小时,宽度和高度都不会改变,这一事实是如此违反直觉!因为您认为您正在调整大小,但您正在缩放。没有写在任何地方有一个调整大小的事件,只是缩放。当使用它时,画一个矩形,然后用左中部的手柄缩放它。来回拖动,您会注意到右侧在不应该移动的时候会移动。您也可以通过将矩形的一条边一直拖到另一条边来获得奇怪的行为。@AndreaBogazzi-ping在这里让您检查一下。如果您前后单击/拖动右中手柄,一切正常。对左中手柄执行相同操作,您将看到右侧移动。
canvas.on("object:scaling", function (e) {
            var target = e.target;
            if (!target || target.type !== 'rect') {
                return;
            }
            var sX = target.scaleX;
            var sY = target.scaleY;
            target.width *= sX;
            target.height *= sY;
            target.scaleX = 1;
            target.scaleY = 1;
            target.dirty = true;
        });