[英]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.