Fabric.js 是一个功能强大且操作简单的 Javascript HTML5 canvas 工具库。
文档:
安装
基本示例
创建容器
<canvas id="canvas" width="400" height="400" style="border: 1px solid #ccc;" ></canvas>
绘制图形
import { fabric } from 'fabric' // 使用 fabric 接管容器 传入canvas的id const canvas = new fabric.Canvas('canvas') // 创建一个长方形 const rect = new fabric.Rect({ top: 30, // 距离容器顶部 30px left: 30, // 距离容器左侧 30px width: 100, // 宽 100px height: 60, // 高 60px fill: 'red' // 填充 红色 }) // 将矩形(rect)加入到canvas画布中 canvas.add(rect)
画布
创建画布
// 可交互的画布 const canvas = new fabric.Canvas('canvas') // 不可交互的画布 const canvas = new fabric.StaticCanvas('canvas')
设定画布参数
// 设定画布参数 const canvas = new fabric.Canvas('canvas', { width: 300, // 画布宽度 height: 300, // 画布高度 backgroundColor: '#eee', // 画布背景色 // 元素对象被选中时保持原有层级 preserveObjectStacking: true, // 默认false // 输出一个精简后的 JSON includeDefaultValues: false })
使用背景图
setBackgroundImage(image, callback, optionsopt) → {fabric.Canvas}
示例
let imageUrl = 'http://fabricjs.com/assets/honey_im_subtle.png' // 设置背景图 // 方法一:设置图片地址 canvas.setBackgroundImage( imageUrl, canvas.renderAll.bind(canvas) ) // 方法二:使用 fabric.Image.fromURL fabric.Image.fromURL(imageUrl, (img) => { canvas.setBackgroundImage( img, canvas.renderAll.bind(canvas) ) } ) // 旋转背景图 canvas.setBackgroundImage( imageUrl, canvas.renderAll.bind(canvas), { angle: 15 } ) // 拉伸背景图, 使图片充满全屏 canvas.setBackgroundImage( imageUrl, canvas.renderAll.bind(canvas), { scaleX: canvas.width / img.width, // 计算出图片要拉伸的宽度 scaleY: canvas.height / img.height // 计算出图片要拉伸的高度 } ) // 重复背景图 canvas.setBackgroundColor( { source: imageUrl, repeat: 'repeat' }, canvas.renderAll.bind(canvas) ) // 设置覆盖图像的画布 // setOverlayImage(image, callback, optionsopt) canvas.setOverlayImage( imageUrl, canvas.renderAll.bind(canvas) )
基础图形
矩形
const rect = new fabric.Rect({ top: 100, // 距离容器顶部 100px left: 100, // 距离容器左侧 100px fill: 'orange', // 填充 橙色 width: 100, // 宽度 100px height: 100 // 高度 100px })
圆角矩形
const rect = new fabric.Rect({ top: 100, // 距离容器顶部 100px left: 100, // 距离容器左侧 100px fill: 'orange', // 填充 橙色 width: 100, // 宽度 100px height: 100, // 高度 100px rx: 20, // x轴的半径 ry: 20 // y轴的半径 })
圆形
const circle = new fabric.Circle({ top: 100, left: 100, radius: 50, // 圆的半径 50 fill: 'green' })
椭圆形
const ellipse = new fabric.Ellipse({ top: 20, left: 20, rx: 70, ry: 30, fill: 'hotpink'
三角形
const triangle = new fabric.Triangle({ top: 100, left: 100, width: 80, // 底边长度 height: 100, // 底边到对角的距离 fill: 'blue'
线段
const line = new fabric.Line( [ 10, 10, // 起始点坐标 200, 300 // 结束点坐标 ], { stroke: 'red', // 笔触颜色 } )
折线
// 不会自动把 起始点 和 结束点 自动闭合 const polyline = new fabric.Polyline([ {x: 30, y: 30}, {x: 150, y: 140}, {x: 240, y: 150}, {x: 100, y: 30} ], { fill: 'transparent', // 如果画折线,需要填充透明 stroke: '#6639a6', // 线段颜色:紫色 strokeWidth: 5 // 线段粗细 5 })
多边形
// 会自动把 起始点 和 结束点 连接起来 const polygon = new fabric.Polygon([ {x: 30, y: 30}, {x: 150, y: 140}, {x: 240, y: 150}, {x: 100, y: 30} ], { fill: '#ffd3b6', // 填充色 stroke: '#6639a6', // 线段颜色:紫色 strokeWidth: 5 // 线段粗细 5 })