Fabric.js:如何在画布上取消选择一个或多个对象?

Pau*_*ing 25 javascript canvas fabricjs

例如,我有帆布,多个对象,**和Ç.其中三个对象被选为激活状态.通过使用Fabric.js,是否可以仅丢弃/停用其中一个对象?

例如,选择了三个对象,然后当单击画布外的按钮时,将丢弃/停用对象B.

我查看了FabricJS官方网站上的doc文件,我只找到了canvas.deactivateAll(),canvas.discardActiveObject().这些功能只能在不是特定活动对象的情况下停用所有活动对象.

有人可以给我一个指导吗?谢谢!

Sha*_*agh 50

我可能会迟到回答这个问题,但最近fabricjs (1.4.3)您可以使用以下内容取消选择画布上的所有选定对象.

canvas.deactivateAll().renderAll();
Run Code Online (Sandbox Code Playgroud)

我在创建该画布的图像之前使用它.希望它可以帮助某人.

  • 对于> 2.x的结构版本,canvas.discardActiveObject(); 是要走的路 (4认同)
  • 如果你还想触发`selection:cleared`和`before:selection:cleared`事件,你可以使用`canvas.deactivateAllWithDispatch()` (3认同)
  • 不再使用fabricjs版本> 2.x https://github.com/fabricjs/fabric.js/issues/4214 (2认同)

Shy*_*iya 14

要丢弃所有活动组,您可以在函数下面使用.Discards当前活动组和激活事件如果由于鼠标事件而由Fabric调用该函数,则该事件将作为parmater传递并发送到fire函数以进行自定义事件.当用作方法时,e param没有任何应用.

canvas.discardActiveGroup();
Run Code Online (Sandbox Code Playgroud)

要丢弃sigle对象,您可以像这样使用.丢弃当前活动的对象和火灾事件.如果由于鼠标事件而由fabric调用该函数,则该事件将作为parmater传递并发送到fire函数以获取自定义事件.当用作方法时,e param没有任何应用.

canvas.discardActiveObject();
Run Code Online (Sandbox Code Playgroud)

在最后,最后渲染顶部画布和辅助容器画布.

canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)

  • →一行`canvas.discardActiveObject()。renderAll();` (2认同)

小智 13

假设您有三个对象objectA,ObjectB和ObjectC以及对象被选中.现在,如果要取消选择任何对象(例如ObjectB).在这种情况下,您可以尝试以下代码.

var activeGroup = canvas.getActiveGroup();
activeGroup.removeWithUpdate(ObjectB);
canvas.renderAll(); 
Run Code Online (Sandbox Code Playgroud)

如果您只有一个节点处于活动状态,则可以执行此操作.

canvas.discardActiveObject();
canvas.renderAll(); 
Run Code Online (Sandbox Code Playgroud)


小智 5

关于更新,只有

canvas.discardActiveObject()
Run Code Online (Sandbox Code Playgroud)


Pau*_*ing 1

我刚刚找到了一种方法:

当多个对象被激活时,它们实际上形成了一个组。那么实际上只需要使用fabric.group的一个名为“removeWithUpdate”的方法就可以了。

例子:

var activeGroup = canvas.getActiveGroup();
activeGroup.removeWithUpdate(theObject);
canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)