使用Fabric.js选择画布上的所有对象

sof*_*var 21 javascript html5-canvas fabricjs

有没有办法明确选择特定时刻出现的所有对象.这可以通过鼠标轻松完成全部选择.是否存在类似按钮的代码解决方案,Select All以便单击它将使所有结构类型对象被选中,然后我可以使用canvas.getActiveGroup();并迭代将更改应用于整个ActiveGroup .

kan*_*gax 32

好问题.

没有内置的方法,但你需要做这些方面的事情:

var objs = canvas.getObjects().map(function(o) {
  return o.set('active', true);
});

var group = new fabric.Group(objs, {
  originX: 'center', 
  originY: 'center'
});

canvas._activeObject = null;

canvas.setActiveGroup(group.setCoords()).renderAll();
Run Code Online (Sandbox Code Playgroud)

代码应该是不言自明的,当你使用鼠标,shift + click等时,它几乎就是在幕后发生的事情.

  • 如果组已存在,则此代码会导致对象跳转位置.如果在此代码之前调用`canvas.deactivateAll();`,则可以使用它(并取出行`canvas._activeObject = null;`因为不再需要它). (4认同)
  • 再一次完美的工作解决方案 非常感谢@kangax! (2认同)

小智 5

使用当前版本的fabric.js(2.3.1),您可以执行以下操作:

canvas.discardActiveObject();
var sel = new fabric.ActiveSelection(canvas.getObjects(), {
  canvas: canvas,
});
canvas.setActiveObject(sel);
canvas.requestRenderAll();
Run Code Online (Sandbox Code Playgroud)

这是来自演示页面的报价:http : //fabricjs.com/manage-selection