Canvas(画布)
限时活动 3456 2026-02-24 17:35:34

现在我们已经详细介绍了对象,让我们回到画布上。

如果创建画布对象,则可以在所有Fabric示例中看到的第一件事——new fabric.Canvas('...')。 fabric.Canvas用作元素的包装,并负责管理该特定画布上的所有Fabric对象。它接受元素的ID,并返回fabric.Canvas的实例。

我们可以在其上添加对象,从中引用或删除它们:

var canvas = new fabric.Canvas('c');

var rect = new fabric.Rect();

canvas.add(rect); // add object

canvas.item(0); // reference fabric.Rect added earlier (first object)

canvas.getObjects(); // get all objects on canvas (rect will be first and only)

canvas.remove(rect); // remove previously-added fabric.Rect虽然管理对象是fabric.Canvas的主要目的,但它也可以用作配置画布本身。是否需要为整个画布设置背景颜色或图像?将所有内容都剪切到某个区域?设置不同的宽度/高度?指定画布是否是交互式的?所有这些选项(以及其他选项)都可以在创建时或之后在fabric.Canvas上设置:

var canvas = new fabric.Canvas('c', {

backgroundColor: 'rgb(100,100,200)',

selectionColor: 'blue',

selectionLineWidth: 2

// ...

});

// or

var canvas = new fabric.Canvas('c');

canvas.setBackgroundImage('http://...');

canvas.onFpsUpdate = function(){ /* ... */ };

// ...Interactivity(互动性)当我们讨论canvas元素时,让我们谈谈交互性。内置的Fabric的独特功能之一是,在我们刚刚查看的所有便捷对象模型之上,都具有一层交互性。

存在对象模型以允许以编程方式访问和操纵画布上的对象。但是在外部,在用户级别上,有一种方法可以通过鼠标(或触摸设备上的触摸)来操纵这些对象。通过new fabric.Canvas('...')初始化画布后,就可以选择对象,对其进行拖动,缩放或旋转它们,甚至将它们组合在一起以在一个块中进行操作!

如果我们希望用户允许在画布上拖动某些东西(例如图像),我们要做的就是初始化画布并在其上添加一个对象。无需其他配置或设置。

为了控制这种交互性,我们可以在画布上结合使用Fabric的“ selection”布尔属性和单个对象的“ selectable”布尔属性。

但是,如果您根本不想要这样的交互层,该怎么办?如果是这种情况,您始终可以用fabric.StaticCanvas替换fabric.Canvas。初始化的语法完全相同。您只能使用StaticCanvas而不是Canvas。

var staticCanvas = new fabric.StaticCanvas('c');

staticCanvas.add(

new fabric.Rect({

width: 10, height: 20,

left: 100, top: 100,

fill: 'yellow',

angle: 30

}));这将创建一个“较轻”版本的画布,而没有任何事件处理逻辑。请注意,您仍然可以使用整个对象模型-添加对象,删除或修改它们,以及更改任何画布配置-所有这些仍然有效。只是事件处理不见了。

稍后,当我们遍历自定义构建选项时,您会看到,如果只需要StaticCanvas,您甚至可以创建一个轻量级的Fabric。如果您需要非交互式图表或应用程序中带有过滤器的非交互式图像,这可能是一个不错的选择。

Copyright © 2022 GXLC网游资讯网-新版本速递_限时活动_礼包兑换 All Rights Reserved.