简体   繁体   English

如何从选择中删除一个特定的 object

[英]How to remove one specific object from selection

I'm trying to make a restriction: when a group of objects is selected, some specific object must not be included in the selection. I'm trying to make a restriction: when a group of objects is selected, some specific object must not be included in the selection.

Fe we create 3 rectangles. Fe 我们创建了 3 个矩形。 If we select the group and the red one is inside of it, it must be removed from selection:如果我们 select 组和红色组在其中,则必须将其从选择中删除:

function addRect(){
    var redRect = new fabric.Rect({
        left: 50,
        top: 50,
        fill: 'red',
        width: 50,
        height: 50
    });

    var greenRect = new fabric.Rect({
        left: 100,
        top: 100,
        fill: 'green',
        width: 50,
        height: 50
    });

    var blueRect = new fabric.Rect({
        left: 150,
        top: 150,
        fill: 'blue',
        width: 50,
        height: 50
    });

    canvas.add(redRect);
    canvas.add(greenRect);
    canvas.add(blueRect);
}


function createCanvas(id){
    canvas = new fabric.Canvas(id);
    addRect();

    canvas.on('selection:created', function(e) {
        for (var i = 0; i < canvas.getActiveObjects().length; i++) {
            if(canvas.getActiveObjects()[i].fill == "red"){
                //somehow remove the red one from selection
            };
        }
    });

    return canvas;
}

discardActiveObject() will remove the whole selection. discardActiveObject() 将删除整个选择。

"selected = false" also doesn't work. “selected = false”也不起作用。

Any ideas?有任何想法吗?

There are two ways to achieve this using selectable property有两种方法可以使用 selectable 属性来实现这一点

http://fabricjs.com/docs/fabric.Rect.html#selectable http://fabricjs.com/docs/fabric.Rect.html#selectable

  • By setting selectable: false within the call back function通过设置 selectable: false 内回调 function

  • By setting selectable: false during object creation.通过在 object 创建期间设置 selectable: false。

 function addRect() { var redRect = new fabric.Rect({ left: 50, top: 50, fill: "red", width: 50, height: 50, selectable: false }); var greenRect = new fabric.Rect({ left: 100, top: 100, fill: "green", width: 50, height: 50 }); var blueRect = new fabric.Rect({ left: 150, top: 150, fill: "blue", width: 50, height: 50 }); canvas.add(redRect); canvas.add(greenRect); canvas.add(blueRect); } function createCanvas(id) { canvas = new fabric.Canvas(id, { height: 500, width: 800, backgroundColor: "rgb(100,100,200)", selectionColor: "blue" }); addRect(); canvas.on("selection:created", function(e) { for (var i = 0; i < canvas.getActiveObjects().length; i++) { if (canvas.getActiveObjects()[i].fill == "red") { canvas.getActiveObjects()[i].selectable = false; canvas.renderAll(); } } }); return canvas; } createCanvas("c");
 <script src="https://cdn.jsdelivr.net/npm/fabric@5.2.4-browser/dist/fabric.min.js"></script> <canvas id="c"> </canvas>

 function addRect() { var redRect = new fabric.Rect({ left: 50, top: 50, fill: "red", width: 50, height: 50, selectable: false }); var greenRect = new fabric.Rect({ left: 100, top: 100, fill: "green", width: 50, height: 50 }); var blueRect = new fabric.Rect({ left: 150, top: 150, fill: "blue", width: 50, height: 50 }); canvas.add(redRect); canvas.add(greenRect); canvas.add(blueRect); } function createCanvas(id) { canvas = new fabric.Canvas(id, { height: 500, width: 800, backgroundColor: "rgb(100,100,200)", selectionColor: "blue" }); addRect(); canvas.on("selection:created", function (e) { for (var i = 0; i < canvas.getActiveObjects().length; i++) { if (canvas.getActiveObjects()[i].fill == "red") { //somehow remove the red one from selection } } }); return canvas; } createCanvas("c");
 <script src="https://cdn.jsdelivr.net/npm/fabric@5.2.4-browser/dist/fabric.min.js"></script> <canvas id="c"> </canvas>

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

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