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

Javascript Fabric.js:如何在画布上取消选择一个或多个对象?,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,例如,我在画布上有多个对象,a、*B*和C。其中三个对象被选择为已激活。通过使用Fabric.js,是否可以仅放弃/停用一个对象 例如,选择三个对象,然后单击画布外的按钮时,对象B被丢弃/停用 我查看了FabricJS官方网站上的文档文件,只找到了canvas.deactivateAll(),canvas.discardActiveObject()。这些功能只能停用所有活动对象,而不能停用特定的活动对象 有人能给我一个关于这个的指导吗?谢谢 我刚刚找到了一种方法: 当多个对象被激活时,它们实际上

例如,我在画布上有多个对象,a、*B*和C。其中三个对象被选择为已激活。通过使用Fabric.js,是否可以仅放弃/停用一个对象

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

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


有人能给我一个关于这个的指导吗?谢谢

我刚刚找到了一种方法:

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

例如:

var activeGroup = canvas.getActiveGroup();
activeGroup.removeWithUpdate(theObject);
canvas.renderAll();

我可能会晚些回答这个问题,但在
fabricjs(1.4.3)
中,您可以使用以下命令取消选择画布上的所有选定对象

canvas.deactivateAll().renderAll();
在创建画布的图像之前,我正在使用它。希望它能帮助别人

对于fabricjs 4.0,您可以使用:

canvas.discardActiveObject().renderAll();

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

var activeGroup = canvas.getActiveGroup();
activeGroup.removeWithUpdate(ObjectB);
canvas.renderAll(); 
如果只有一个节点处于活动状态,则可以执行此操作

canvas.discardActiveObject();
canvas.renderAll(); 

要放弃所有活动组,您可以使用下面的函数。放弃当前活动组和火灾事件如果结构由于鼠标事件调用该函数,则该事件将作为parmater传递,并发送到火灾函数以用于自定义事件。当用作方法时,e参数没有任何应用

canvas.discardActiveGroup();
canvas.discardActiveObject();
要丢弃单个对象,可以这样使用。丢弃当前活动的对象和激发事件。如果fabric作为鼠标事件的结果调用该函数,则该事件将作为parmater传递,并发送给fire函数以用于自定义事件。当用作方法时,e参数没有任何应用

canvas.discardActiveGroup();
canvas.discardActiveObject();
在最后一个示例中,最终将顶部画布和辅助容器画布呈现为如下所示

canvas.renderAll();

在更新中,只有

canvas.discardActiveObject()

如果您还想触发
选择:cleared
before:selection:cleared
事件,您可以使用
canvas.deactivateAllWithDispatch()
不再使用fabricjs版本>2.x的fabricjs版本>2.x,canvas.discardActiveObject();使用该对象:deseleted事件取消选择后,如何获得该取消选择的对象?→ 在一行
canvas.discardActiveObject().renderAll()中正确,但请再次阅读我的答案。我添加了如何丢弃组、对象,然后渲染它。您在此处添加的一行仅在您要删除单个对象并渲染它时有效,但如果要删除整个组,则必须在不同的组之间进行更改。虽然我们感谢您的回答,但如果它在其他回答的基础上提供附加值,则会更好。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果先前的答案对你有帮助,你应该在你有足够的答案后再回答