【fabrc.js】 创建组(fabric.Group)类型的 3 种方式

  • 方法1:先选中已存在画布内多个图形,然后拿到ActiveSelection数据,随后调用 `toGroup()` 即可将选中的图形创建为组对象;
  • 方法2:new fabric.Group() 获取group实例,通过new的时候传入图形参数[o1,o2...],然后将group实例add到画布上;
  • 方法3:在方法2的基础上,group实例也可通过addWithUpdate将图形添加进组里。

上述3种方法使用时对应多种不同的场景,根据当前需求进行选择其中一个方式即可;


方法1:

javascript 复制代码
  const canvas = new fabric.Canvas("c", {
    backgroundColor: "grey",
    width: 1000,
    height: 666,
  });

  const line = new fabric.Line([10, 10, 333, 200], {
    strokeWidth: 1,
    stroke: "yellow",
    id: "linexx",
  });
  const rect = new fabric.Rect({
    left: 100,
    top: 100,
    width: 100,
    height: 50,
    fill: "pink",
  });


  canvas.add(line);
  canvas.add(rect);

// 然后在画布上通过鼠标多选选中上面的线条和矩形,此时通过canvas.getActiveObject()即可拿到当前激活的图形对象,由于选中了多个,此时拿到的就是activeSelection类型的klass实例数据,然后.toGroup()即可将该两个图形转换为组!
canvas.getActiveObject().toGroup()

方法2 & 3:

javascript 复制代码
  const line = new fabric.Line([10, 10, 333, 200], {
    strokeWidth: 1,
    stroke: "yellow",
  });
  const rect = new fabric.Rect({
    left: 100,
    top: 100,
    width: 100,
    height: 50,
    fill: "pink",
  });

  const group = new fabric.Group([line, rect], {})
  canvas.add(group);

  // 如果画布内的组对象里有某图形A,禁止再将该A图形重复添加进画布!
  // canvas.add(line); // 会导致BUG
    
  // 如果要将某图形添加到已声明的group实例里,则通过 addWithUpdate 方法实现。
  const rect2 = new fabric.Rect({
    left: 300,
    top: 300,
    width: 100,
    height: 50,
    fill: "yellow",
  });
  setTimeout(() => {
    group.addWithUpdate(rect2);
  }, 1000);
相关推荐
摘星编程9 分钟前
用React Native开发OpenHarmony应用:自定义useCSS类名操作
javascript·react native·react.js
小马_xiaoen12 分钟前
Vue3 + TS 实现长按指令 v-longPress:优雅解决移动端/PC端长按交互需求
前端·javascript·vue.js·typescript
147API24 分钟前
改名后的24小时:npm 包抢注如何劫持开源项目供应链
前端·npm·node.js
ziqi52226 分钟前
第二十二天笔记
前端·chrome·笔记
鹤归时起雾.27 分钟前
react一阶段学习
前端·学习·react.js
乐~~~29 分钟前
评估等级页面
javascript·vue.js
微祎_29 分钟前
Flutter for OpenHarmony:构建一个专业级 Flutter 番茄钟,深入解析状态机、定时器管理与专注力工具设计
开发语言·javascript·flutter
2301_7806698632 分钟前
HTML-CSS-常见标签和样式(标题的排版、标题的样式、选择器、正文的排版、正文的样式、整体布局、盒子模型)
前端·css·html·javaweb
薯片锅巴35 分钟前
锅巴的JavaScript进阶修炼日记2:面向对象编程/原型及原型链
开发语言·javascript·ecmascript
mseaspring41 分钟前
一款高颜值SSH终端工具!基于Electron+Vue3开发,开源免费还好用
运维·前端·javascript·electron·ssh