v5 的重大变更

2026-07-04 175 浏览 0 评论

首先,目前支持的最低 Node 版本是 14。JSDOM 可以与 12 版本兼容,这也是我们做出更改的原因,但我们觉得至少应该支持 14 版本。fabricJS 4.x 中保留了一些已弃用的方法和函数,以保持向后兼容性。

圆的起始角和结束角

让我们从最糟糕的变化开始:为了保持一致性,现在 Circle.startAngle 单位 Circle.endAngle 是度,不再是弧度了。

它将所有使用圆形且导出时包含默认值的旧设计作废。这是一个影响巨大的变革,其他所有变革都相当微不足道,应该不会造成任何问题,除非是那些使用了自定义功能和覆盖的项目。

该怎么办

这里有点棘手,导入 JSON 数据时需要附加一个 reviver,或者重写 circle 的 fromObject 方法来保持兼容性。

myCanvas.loadFromJSON(data,
  // callback, usually a re-render and some specific app code
  () => { myCanvas.requestRenderAll() },
  // the reviver
  (data, instance, error) => {
    // detect that version is less than 5
    if (parseInt(data.version.slice(0, 1), 10) < 5) {
      instance.startAngle = fabric.util.radiansToDegrees(data.startAngle);
      instance.endAngle = fabric.util.radiansToDegrees(data.endAngle);
    }
  },
);

已移除转换事件

那些事件已经过去了:

* @fires object:rotated at the end of a rotation transform
* @fires object:scaled at the end of a scale transform
* @fires object:moved at the end of translation transform
* @fires object:skewed at the end of a skew transform

这些事件是 3.x 及更早版本控制逻辑的遗留产物。不要将它们与缩放、旋转、移动、倾斜混淆。这些事件是在变换结束时,当发生上述某些操作时触发的。可以将它们视为叠加在变换层之上的额外细节 object:modified

作为此项变更的副作用, _addEventOptions 私有且已弃用的 canvas 方法已被移除。该方法的唯一用途是支持此功能。

该怎么办

如果您需要此信息,可以检查事件中 object:modified 的 action 属性。

myRect.on('modified', (opt) => {
  // inspect action and check if the value is what you are looking for
  const action = opt.action;
});

选择事件属性

事件(例如 selection:updatedselection:created 不再具有以下属性:

  • updated
  • target

这些是移除旧事件后遗留的兼容性属性。这些属性引用了一个 fabric.Object 对象。

该怎么办

在同一事件中,您可以查看已选和未选属性,其中包含一个事件数组。该数组的第一个元素是这些属性所引用的内容。

移除已弃用的方法

Object.calcCoordsObject._calcDimensionsTransformMatrixgroup.realizeTransform 都已移除。自从我们引入了不同的坐标集 aCoords ​和 oCoords ​ 之后,通用方法 calcCoords ​就不再有用了。它已不再用于内部计算,并被保留下来,以避免干扰版本 4 的发布。未来我们希望只保留 aCoords ​。

Object._calcDimensionsTransformMatrix 之前它处理的是边界框变换的特定情况。不久前,我们引入了一个可以实现相同功能的通用工具,但该工具 calcDimensionsMatrix_calcDimensionsTransformMatrix 被弃用,并且调用时使用 calcDimensionsMatrix 了以下参数:

_calcDimensionsTransformMatrix: function(skewX, skewY, flipping) {
  return util.calcDimensionsMatrix({
    skewX: skewX,
    skewY: skewY,
    scaleX: this.scaleX * (flipping && this.flipX ? -1 : 1),
    scaleY: this.scaleY * (flipping && this.flipY ? -1 : 1)
  });
}

fabricJS 中也存在类似的情况 group.realizeTransform ,该函数未使用,并且除了它所调用的通用工具函数之外,没有提供任何功能。

realizeTransform: function(object, parentMatrix) {
  fabric.util.addTransformToObject(
    object,
    parentMatrix || this.calcTransformMatrix()
  );
  return object;
},

该怎么办

对于 calcCoords,只需在需要时调用 calcACoords 或 calcOCoords 即可。对于 _calcDimensionsTransformMatrix 和 realizeTransform,请按照代码片段所示调用相应的实用程序。

路径利用已移除

由于 v4.x 版本进行了路径简化,以下实用程序不再使用,但为了兼容性而保留: utils.getBoundsOfArc , utils.drawArc , utils.fromArcToBeizers , utils.drawDashedLine ​这些实用程序现已移除。

该怎么办

drawDashedLine 这些功能 getBoundsOfArcdrawArc 被移除。如果您确实需要它们,则需要将它们复制回您的代码并自行维护。FabricJS utils.fromArcToBeizers 内部仍然保留了有趣的部分供内部使用,如果您需要使用它,则需要自行将其公开。


发布评论

发布评论前请先 登录
0 评论
点赞
收藏

评论列表 0

暂无评论