FabricJS gotchas/FabricJS陷阱[通俗易懂]

FabricJS gotchas/FabricJS陷阱[通俗易懂]FabricJSgotchas这个页面包含了第一次接触fabricJS的人打开的最常见问题的列表。这些缺陷的产生,既有解释不清的原因,也有文档不完善的原因。在这里,我们试图解决共同的问题。Objectsarenomoreselectable-setCoords(对象不再是可选择的-setCoords)Fabric包含两组坐标以快速知道物体在画布上的位置。它们链接到两个对象属性:oCoords和aCoords。当用户与对象交互或结束变换(例如拖动)时,fabricJS会自动更新这些坐标。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

FabricJS gotchas

其他文章见:Fabric.js中文文档导航

这个页面包含了第一次接触fabricJS的人打开的最常见问题的列表。这些缺陷的产生,既有解释不清的原因,也有文档不完善的原因。在这里,我们试图解决共同的问题。

Objects are no more selectable – setCoords(对象不再是可选择的-setCoords)

Fabric包含两组坐标以快速知道物体在画布上的位置。它们链接到两个对象属性:oCoords和aCoords。

当用户与对象交互或结束变换(例如拖动)时,fabricJS会自动更新这些坐标。在所有其他情况下,开发人员必须调用对象.setCoords()以便在渲染位置识别对象。

最常见的症状是对象不可选择。这发生在通过“top/left”或“scale”或“canvas”视口更改开发代码之后。在这些操作之后,相同的代码最终应该对所有对象调用“setCoords()”。

function repositionRect(x, y) { 
   
    rect.left = x;
    rect.top = y;
    rect.setCoords();
  }

Jetbrains全家桶1年46,售后保障稳定

Wrong position after reloading a JSON object – NUM_FRACTION_DIGITS(重新加载JSON对象后位置错误-NUM_FRACTION_DIGITS)

Fabric可以以纯对象格式序列化和反序列化对象。

在处理序列化时,float可能是一个问题,并提供带有不必要数量小数的长字符串。这会使字符串大小增大。

为了减少这种情况,在名为“NUM_ufracts\u DIGITS”的对象上定义了一个常量,历史上设置为2。这意味着,顶部值’3.454534413123’被保存为’3.45’,对于比例、宽度、高度相同。除非你在没有精度问题的情况下进行处理,否则这基本是最好的。

举一个例子,可以使用“ 0.0151”的比例将非常大的图像缩小为较小的尺寸。

在这种情况下,序列化会将其另存为“ 0.02”,从而有意义地改变了比例。如果遇到这种情况,请在项目中设置更高的常量:fabric.Object.NUM_FRACTION_DIGITS = 8以使属性具有8位小数。 这也会影响SVG导出。

这也会影响SVG导出。

Objects misbehave when dealing with text input – numbers vs strings(对象在处理文本输入时表现不正常-numbers vs strings)

有时,在原型和概念的快速证明中,人们使用文本输入来更改fabric对象的属性。

Fabric文档指出top,left,scaleX,angle和其他属性需要数字作为值。

文本输入返回字符串。当将字符串转换为数字时,FabricJS不会检查类型也不进行转换,这是由于某些代码的副作用,而不是要依赖的功能。

在将值分配给需要数字的属性之前,请使用parseInt和parseFloat。

Object does not update after changing property – objectCaching(更改属性后对象不会更新-objectCaching)

造成混淆的常见原因是,开发人员分配了新的属性来填充并且对象在renderAll之后不更新。 FabricJS确实将对象缓存为图像以加快渲染速度。如果您想让fabricJS知道某些更改并且需要重绘特定对象,请使用set方法。

rect.set('fill', 'red');
canvas.requestRenderAll();

或者,作为替代:

rect.fill = 'red';
rect.stroke = 'blue';
rect.set('dirty', true);

有关更多信息和详细说明,请查看专用的缓存页面

Objects have a transparent stroke of width 1 by default(默认情况下,对象的透明stroke宽度为1)

默认情况下,对象的宽度为1的透明stroke会在水平和垂直方向上将其移动0.5个像素。这将使您难以将对象定位在准确的位置。造成这种情况的原因有两个:-如果没有strokeWidth,则设置stroke color不会带来任何结果-SVG具有相同的默认值,因此对于svg导入来说,这样做是有道理的-在fabric v1.5之前,stroke不是控制边界框和位置的部分,所以这不是问题。要删除stroke:

rect.set('strokeWidth', 0);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206740.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 伴随矩阵_伴随矩阵通俗理解

    伴随矩阵_伴随矩阵通俗理解$A^$是矩阵$A$的伴随矩阵:$$a^_{ji}=A_{ij}$$其中,$A_{ij}$是$a_{ij}$的代数余子式.方阵的伴随矩阵可用于求逆:$$AA^=|A|I

    2022年8月6日
    9
  • golang 2021.10.3 激活码-激活码分享

    (golang 2021.10.3 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSW…

    2022年3月27日
    47
  • DateTime格式大全

    DateTime格式大全

    2021年11月29日
    61
  • Weblogic介绍「建议收藏」

    Weblogic介绍「建议收藏」Weblogic是一个服务器,可以做web服务器也可以做应用服务器WebLogic是美国Oracle公司出品的一个ApplicationServer,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和JavaEnterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

    2025年6月18日
    4
  • idea文本替换快捷键_idea中替换单词

    idea文本替换快捷键_idea中替换单词废话不多说,直接上干货:Edit–Find–ReplaceinPath示例,可以一个个的点击replace替换,也可以点击replaceall一次性全部替换,查找的时候可以匹配大小写,英文可以全词匹配替换的范围可以是整个项目||项目中的某个模块||某个目录等…

    2022年9月29日
    7
  • hive数据库数据类型_hive decimal类型

    hive数据库数据类型_hive decimal类型下面介绍几种常用的数据类(1)CHAR()该数据类型用于定义固定长度的字符串,其中用于指定字符串的最大长度,必须是正整数且不超过32767。使用CHAR类型定义变量时,如果没有指定则默认值为1。需要注意的是,在PL/SQL块中,使用该数据类型操纵CHAR表列时,其数值的长度不应超过2000字节。(2)VARCHAR2()该数据类型用于定义可变长度的字符串,其中用于指定字符串的最大长度,必须是正整数且不超过32767。使用VARCHAR2类型定义变量时,必须指定的值。需要注意的是,在P…

    2026年2月5日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号