javascript - FabricJS:对象控件在共同选择之前不起作用

标签 javascript vue.js canvas controls fabricjs

我正在使用 Vue 和 FabricJS 创建一个产品配置器。
我创建了一个 Canvas 使用

this.canvas = new fabric.Canvas("canvas");
<template>
  <div id="wrapper">
    <div id="left"></div>
    <canvas id="canvas"/>
  </div>
</template>

在我将对象添加到 Canvas (IText、文本框、图像,使用 new fabric.IText(...))并用鼠标选择它后,我无法使用对象控件来调整大小、缩放、倾斜或旋转对象。但是,我可以在 Canvas 上移动对象。添加另一个对象后,一次选择它们并再次取消选择,控件突然按预期工作。我无法在 JsFiddle 上重现该问题,一切正常。
Controls not working until both objects are selected
我使用各种浏览器遇到了这个问题。
我是否缺少一些 Canvas 属性,它在添加后立即启用?或者这是 Fabric.js 中的一个错误?

最佳答案

一段时间后,我使用了一种解决方法:
我在创建它之后立即向 Canvas 添加了一个空的帮助对象,然后在添加每个新对象后,我以编程方式选择并取消选择所有这些对象。之后,所有对象的行为都正确。我知道这是一个“黑客”,但它有效:)

this.canvas = new fabric.Canvas("canvas", {
    ...canvasProps
});

const helperObj = new fabric.Object({});    //abstract invisible object
helperObj.set("selectable", false);         //so the user is not able to select and modify it manually
this.canvas.add(helperObj);

this.canvas.on("object:added", () => {
  //workaround - selecting all objects to enable object controls

  let objects = this.canvas.getObjects();
  var selection = new fabric.ActiveSelection(objects, {
     canvas: this.canvas,
  });
  this.canvas.setActiveObject(selection);   //selecting all objects...
  this.canvas.discardActiveObject();        //...and deselecting them
  this.canvas.requestRenderAll();
});

关于javascript - FabricJS:对象控件在共同选择之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64697215/

相关文章:

javascript - jQuery - 使用 HTML 实体转义内联样式

vue.js - Vue-router 附加相同的 URL

vue.js - Vue 动态组件事件绑定(bind)

jquery - 如何删除此 codepen 移动示例中提出的自定义滚动

javascript - 使用 HTML5 Canvas 进行动画图像过渡

javascript - 如何叠加两个GetCanvas?

javascript - 工厂返回返回函数,而不是函数的产物

javascript - 在更改选择下拉列表中的值时更新引导日期选择器的 DaysOfWeekDisabled

javascript - Watchify 不发出更新事件

vue.js - vue-instagram : images showing as icons, 即使 src/url 是正确的