Fabric.js 避坑指南(持续更新中)

Posted Paisynah-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fabric.js 避坑指南(持续更新中)相关的知识,希望对你有一定的参考价值。

1. group 中 add(), addWithUpdate(), setCoords() 的区别

使用过程中发现,addWithUpdate()会把组当前 scale 设为 1,angle 设为 0。
例如当前组大小为初始组的 0.6 倍(即 scale=0.6),执行 addWithUpdate() 之后,组将视当前大小为 scale=1的大小。
所以,如果你希望组 scale=1, angle=0的显示效果固定,请慎重使用 addWithUpdate()

下面的解释参考 Fabric.js: what is the difference between add() and addWithUpdate() ?
add()只是把新对象加入组,
addWithUpdate()是把组解散再重组,重新获取组边框/规模/角度等,
setCoords() 是更新组坐标,
建议使用顺序为 add(object),不带参数的 addWithUpdate(),不带参数的 setCoords(),再 renderAll()
(实际上只有最后一步渲染是必要的,前面三步视情况选择)

2. fabric 的 this 或外部的 this 冲突

加指向外部this的指针,本文使用:

var gpoint = this
3. 重新设置 group 内图片路径 / group 内 IText 文字后,画布不渲染 / 需要其它操作才能渲染

重新设置组的scaleX,scaleY,例如

.set({scale加一})
.setCoords(),
.renderAll(),
.set({scale减一})
.setCoords(),
.renderAll(),

你对组的设置就可以渲染成功了,而且换成改angle也不行,很魔幻。

4. 如何修改组内的图片url地址?
var img = new Image()
var gpoint = this //vue的this和fabric里指向对象的this冲突(见问题2)
img.onload = function() {
gpoint.group._objects[0].setElement(img)
    // 可以使用 addWithUpdate() 但会重置 scale 和 angle(见问题1)
    // 自己写的渲染函数(见问题3)
    gpoint.canvas_real_render() 
}
img.src = src
5. 明明先定义了对象,后面的语句引用它的时候显示没有这个对象

在同一个 function() 中,fabric的语句会在最后执行,可能是由于异步的关系。

以上是关于Fabric.js 避坑指南(持续更新中)的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 常用配置,避坑指南!

回归 | js实用代码片段的封装与总结(持续更新中...)

老司机避坑指南:如何快速搞定微服务架构?

终极 C++避坑指南

Nginx常用配置,避坑指南!

.NET AsyncLocal 避坑指南