12

我想让画布中的所有对象都无法选择。我找到了可选择的方法,但我没有找到将它实施到所有对象的方法。

4

5 回答 5

13

我一直在寻找一个不可移动不可编辑的Fabric Text,我终于找到了一个结合了几个 SO 的解决方案,希望我可以节省一些时间。

在我的情况下,使用"selectable": false是不够的:文本仍然是可编辑的,光标仍然是“可移动光标”(即使对象不可选择)。

我不得不添加"evented": false。这是一个例子:

this.canvas.add(new fabric.Text("Hello world !", {
            "selectable": false,
            "evented": false
}));

您可以在此处使用不同的控制选项:http: //fabricjs.com/controls-customization

于 2019-04-09T17:45:58.963 回答
11

您可以使用以下代码使所有元素无法选择

canvas.deactivateAll();
canvas.renderAll();
canvas.forEachObject(function(object){ 
       object.selectable = false; 
});
于 2016-02-17T09:46:11.167 回答
7

选项中有这样的方法-

selectable: false

      or 

object.set({selectable:false})

      or


 object.selectable = false;
于 2013-07-02T07:27:43.460 回答
0

在父 HTML 元素上使用 css 属性pointer-events

.locked {
    pointer-events: none;
}

要从 javascript 设置此属性:

let canvasElement = document.getElementsByClassName("canvas-container")[0]
canvasElement.classList.add("locked")

解锁画布:

canvasElement.classList.remove("locked")
于 2021-05-18T09:38:46.523 回答
0
canvas._objects.forEach(obj => {obj.selectable = false;});
canvas.discardActiveObject();

这应该可以解决问题!discardActiveObject应该触发请求重新渲染的事件,因此您不需要手动调用renderAll. 通常,您应该始终使用requestRenderAll而不是renderAll.

于 2021-10-10T12:44:16.133 回答