fabric.js 起步CDN引入与npm安装,对比原生canvas异同?

网安智编 厦门萤点网络科技 2025-07-14 00:06 98 0
起步 CDN引入:推荐使用引入,提供包括等在内的众多库的引入服务 npm安装:npm --save 一个简单的 demo 通过fabric.Canvas获取到canvas元素,并可以对canvas进行相应的设置,既可以通过获取已存在的...

起步

CDN引入:推荐使用引入,提供包括等在内的众多库的引入服务

npm安装:npm --save

fabric.js canvas demo_canvas绘制三角形_fabric.js CDN引入

一个简单的 demo

通过fabric.Canvas获取到canvas元素,并可以对canvas进行相应的设置,既可以通过获取已存在的canvas元素,fabric也支持创建canvas元素,同样也能对其进行相应操作

之前有一个需求是点鼠标左键并进行拖动,要实现实时在上进行画图

于是分别用元生和制作了该功能,接下来我们对比下两者的异同

fabric.js canvas demo_fabric.js CDN引入_canvas绘制三角形

原生

fabric.js CDN引入_canvas绘制三角形_fabric.js canvas demo

.

通过对比我们可以发现,跟原生写法比起来fabric写法更加直观也更加简洁设置相关属性也比原生的更加方便,并且在画线的过程中也显得更加的流程

API介绍

.Rect({}) 方形

- left:0, // 距离画布左侧的距离

- top:0, // 距离画布上边的距离

- fill:'oink', // 背景颜色

- width:10, // 宽度

- :10 // 高度

- 更多属性不一一赘述

.({}) 圆形

- 同方形

.({}) 三角形

- 同方形

.Pat({M x y L x1 y1 L x2 y2 z}) 多边形

- M表示起点,从坐标为x、y点起步,画到L x1、y1点,然后在画到L x2、y2点,最后z表示闭合改图形

- Image() 通过元素插入图片

- () 通过URL插入图片

在中,提供了很多不同的事件,下面介绍一部分常见的事件

更多更具体的事件可以参考

mouse(鼠标事件)
- move:按下且移动
- down:按下时
- up:按下抬起时
- dblclick:双击时
- mouseout:离开元素时
- mousewheel:滚轮事件
selection
- created 初次选中图层
- updated 图层选择变化
- cleared 清空图层选中
after
- render画布重绘后
object(对象)
- selected:被选中
- deselected:取消选中
- moving:移动
- rotating:旋转
- added:添加
- removed:移除
- modified:调整

obj.set()

fabric.js canvas demo_canvas绘制三角形_fabric.js CDN引入

通常设置属性的方式有两种,第一种是在绘制的时候添加进去。另一种是通过set方法设置 例:obj.set({color:''}) 注意:需canvas.add(obj)刷新页面 obj.get() 有set方法自然就有get方法 例:obj.getXXX 获取相应属性的属性值

fabric.Group([x,y],{属性设置})
Group属性可以将x与y两个fabric实例组合成一个组别,在页面上显示出来

toJSON(序列化)
- 导出画布信息
loadFromJSON(反序列化)
- 将导出的信息还原成画布

obj.renderAll()
所有图层的操作之后,都需要调用这个方法刷新
obj.add()
将场景加入画布中

操作案例

// 上移图层 
obj.bringForward(); 
// 下移图层 
obj.sendBackwards(); 
// 使用canvas对象的moveTo方法,移至图层到指定位置 
card.moveTo(obj, index);
// 旋转图层
obj.rotate(angle)
// 翻转图层,沿着X轴或者Y轴翻转
obj.set({
 scaleX/Y: -this.selectedObj.scaleX/Y,
})
// 删除图层
obj.remove()
在进行相应操作后都需要canvas.renderAll()重新刷新画布,否则操作不生效

canvas.item(index:number)
查找第index个添加到canvas的组件

总结

通过总结和使用体验下来,的功能显得十分的强大,可以实现多样的效果,但由于时间局限,只是稍微整理了一下,但是还有许多的功能没有使用到,这部分的内容就需要在后续的开发过程中继续深入挖掘了,或者通过查看文档来加深了解,不过个人感觉官网文档并不显得那么友好,还没有官网demo显得友好