可以通过 npm 安装 Fabric.js 或直接引入脚本文件。
npm install fabric
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.2.4/fabric.min.js"></script>
以下是一个基本示例,展示如何使用 Fabric.js 在 Canvas 上绘制一个简单的矩形:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Fabric.js Example</title>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.2.4/fabric.min.js"></script>
<script>
var canvas = new fabric.Canvas('canvas');
var rect = new fabric.Rect({
left: 100,
top: 100,
fill: 'red',
width: 50,
height: 50
});
canvas.add(rect);
</script>
</body>
</html>
fabric.Canvas 是 Fabric.js 的核心类,负责管理和渲染所有的图形对象。
var canvas = new fabric.Canvas('canvas');
Fabric.js 提供了多种图形对象,如 fabric.Rect、fabric.Circle、fabric.Text、fabric.Image 等。
var rect = new fabric.Rect({
left: 100,
top: 100,
fill: 'red',
width: 50,
height: 50
});
canvas.add(rect);
var circle = new fabric.Circle({
left: 200,
top: 200,
radius: 50,
fill: 'blue'
});
canvas.add(circle);
var text = new fabric.Text('Hello Fabric.js', {
left: 300,
top: 300,
fontSize: 30,
fill: 'green'
});
canvas.add(text);
Fabric.js 支持加载和处理图像。
fabric.Image.fromURL('path/to/image.jpg', function(img) {
img.set({
left: 100,
top: 100,
scaleX: 0.5,
scaleY: 0.5
});
canvas.add(img);
});
Fabric.js 支持对象的拖拽、缩放、旋转以及各种事件处理。
rect.set({
hasControls: true,
hasBorders: true,
selectable: true
});
canvas.renderAll();
rect.on('selected', function() {
console.log('Rectangle selected');
});
canvas.on('object:moving', function(e) {
console.log('Object moving: ', e.target);
});
Fabric.js 支持将多个对象进行分组,便于整体操作。
var group = new fabric.Group([rect, circle], {
left: 150,
top: 150
});
canvas.add(group);
可以使用 fabric.Path 绘制复杂的路径。
var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({
left: 100,
top: 100,
fill: 'yellow',
stroke: 'black',
strokeWidth: 2
});
canvas.add(path);
Fabric.js 提供了简单的动画功能。
rect.animate('left', 400, {
onChange: canvas.renderAll.bind(canvas),
duration: 1000,
easing: fabric.util.ease.easeOutBounce
});
可以将 Canvas 内容导出为 JSON 格式,以便保存和恢复。
var json = canvas.toJSON();
canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));