简体   繁体   English

Fabric.js:如何仅使用addWithUpdate()对对象进行分组

[英]Fabric.js: how to group objects using only addWithUpdate()

My point is to create a group of 3 Rectangles, and center the group. 我的观点是创建一个由3个矩形组成的组,并将该组居中。 The problem is I cannot group those rectangles so the following problem is, when I center the group, all rectangles will overlap on the same center position. 问题是我无法对这些矩形进行分组,因此以下问题是,当我将组居中时,所有矩形都将在同一中心位置重叠。

explaining from the code for easier understanding, the rectangle in each i has different position so I have to create a group to store them then center the group in order to prevent rectangles overlapping on the same center position. 为了便于理解,从代码中进行解释,每个i的矩形都有不同的位置,因此我必须创建一个组来存储它们,然后将组居中,以防止矩形在同一中心位置重叠。

    for (var i = 0; i < count; i++) {
        var Bid = '#' + i;
        var Bheight = $(Bid).height();
        var Bwidth = $(Bid).width();
        var Btop = $(Bid).position().top;
        var Bleft = $(Bid).position().left;
        alert(Bleft);

        var clipRect = new fabric.Rect({
            originX: 'left',
            originY: 'top',
            height: Bheight,
            width: Bwidth,
            left: Bleft,
            top: Btop,
            fill: '#DDD',
            opacity: 0.5,
            strokeWidth: 0,
            selectable: false
        });

        var group = new fabric.Group();
        group.addWithUpdate(clipRect);
        canvas.add(group);
        canvas.centerObject(group);
        canvas.renderAll();
    }

However, if you have got better solution for my point, please suggest it. 但是,如果您对我的观点有更好的解决方案,请提出建议。 I will appreciate it a lot. 我会很感激。

You're creating a new group each time your loop iterates. 每次循环时,您都在创建一个新组。

var group = new fabric.Group();

for (var i = 0; i < count; i++) {
    var Bid = '#' + i;
    var Bheight = $(Bid).height();
    var Bwidth = $(Bid).width();
    var Btop = $(Bid).position().top;
    var Bleft = $(Bid).position().left;
    alert(Bleft);

    var clipRect = new fabric.Rect({
        originX: 'left',
        originY: 'top',
        height: Bheight,
        width: Bwidth,
        left: Bleft,
        top: Btop,
        fill: '#DDD',
        opacity: 0.5,
        strokeWidth: 0,
        selectable: false
    });


    group.addWithUpdate(clipRect);
}

canvas.add(group);
canvas.centerObject(group);
canvas.renderAll();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM