fabric.js基础使用

1.正方形

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Fabric.js Watermark Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.0/fabric.min.js"></script>
    <style>
      #canvas {
        border: 1px solid #ccc;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas" width="800" height="800"></canvas>
    <script>
      // 初始化 Fabric.js Canvas
      var canvas = new fabric.Canvas("canvas");
      var rect = new fabric.Rect({
        left: 100, // 靠左距离
        top: 100, // 靠右距离
        fill: "red", // 填充颜色
        width: 30, // 宽度
        height: 30, // 高度
      });
      canvas.add(rect);
      console.log("666", canvas);
    </script>
  </body>
</html>

2.圆形,三角形

var rect = new fabric.Rect({
        left: 100, // 靠左距离
        top: 100, // 靠右距离
        fill: "red", // 填充颜色
        width: 30, // 宽度
        height: 30, // 高度
      });
      // 圆形
      var circle = new fabric.Circle({
        radius: 50,
        fill: "green",
        left: 200,
        height: 200,
      });
      // 三角形
      var triangle = new fabric.Triangle({
        fill: "blue",
        width: 80,
        top: 300,
        left: 200,
        height: 200,
      });
      canvas.add(rect);
      canvas.add(circle);
      canvas.add(triangle);

3.图片属性(有水印功能,其实就是添加文字上去)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Fabric.js Watermark Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.0/fabric.min.js"></script>
    <style>
      #canvas {
        border: 1px solid #ccc;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas" width="800" height="600"></canvas>
    <img
      src="./123/10dfa9ec8a13632762d035b5c1dcb7ec08fa503d69a3.jpg"
      id="img1"
    />
    <script>
      // 初始化 Fabric.js Canvas
      var canvas = new fabric.Canvas("canvas");
      // 加载图片
      fabric.Image.fromURL(
        "./123/10dfa9ec8a13632762d035b5c1dcb7ec08fa503d69a3.jpg",
        function (img) {
          // 设置图片大小和位置(可选)
          img.scaleToWidth(600);
          img.scaleToHeight(600);
          img.angle = 5;
          console.log("img", img);

          // 将图片添加到 Canvas
          canvas.add(img);

          //   // 添加水印文本
          var watermarkText = new fabric.Text("水印", {
            left: 350,
            top: 350,
            fill: "rgba(1, 255, 255, 0.5)", // 半透明白色
            fontSize: 36,
            fontFamily: "Arial",
            angle: -30, // 倾斜角度
          });

          //   // 将水印文本添加到 Canvas
          canvas.add(watermarkText);

          // 渲染 Canvas(Fabric.js 会自动处理,但明确调用也没问题)
          canvas.renderAll();
        }
      );
    </script>
  </body>
</html>

4.路径画多边形

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Fabric.js Watermark Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.0/fabric.min.js"></script>
    <style>
      #canvas {
        border: 1px solid #ccc;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas" width="800" height="600"></canvas>
    <script>
      // 初始化 Fabric.js Canvas
      var canvas = new fabric.Canvas("canvas");
      // M 开始的点 L 中间点 200 200 L 170 200 第三个点 ... z闭合
      var path = new fabric.Path("M 0 0 L 200 200 L 170 200 L 20 170 z");
      path.set({
        left: 120,
        top: 120,
        fill: "red",
      });
      canvas.add(path);
    </script>
  </body>
</html>

<think>嗯,用户这次明确要查找Fabric.js使用教程、指南和示例。看来ta正在学习这个Canvas库,可能需要快速上手的资料。从用户两次提问的连贯性来看,ta应该是个前端开发者,正在评估或开始使用Fabric.js做图形项目。有趣的是用户特意提到“不是真正的需求”,说明ta更关注实用教程而非理论文档,而且引用的中文资料居多,可能英语不是特别强。整理五个引用资料发现:引用[1][4]适合入门,引用[2]有安装指引,引用[5]其实是官方文档的中文入口。最意外的是引用[3]指向Gitcode源码库——这倒是开发级用户需要的。用户的核心诉求应该是“用最少时间做出可运行的Fabric.js示例”,所以回复要突出:第一优先级是直接可运行的代码片段(如引用[1]的矩形示例),同时给出效果预览图增强信心第二是中文教程链接(引用[4]明确提到中文教程),符合用户语言偏好第三是避免理论说明,直接导向动手操作,像引用[2]的安装步骤就很有用考虑到用户可能后续深入,最后应该准备梯度问题:1)绘制图表属于具体功能,能覆盖用户可能的图表项目需求2)事件监听是进阶开发刚需3)导出功能则是实际业务痛点特别要注意引用[5]里的“FabricGotchas”(常见问题),虽然没展开但暗示了初学者容易遇到的坑,在回答里用⚡标识这种实战建议会很实用。对了,用户没提框架整合,暂时无需涉及React/Vue集成方案。</think> 以下是针对 Fabric.js 的完整使用指南和实用示例,结合官方文档和中文社区资源整理而成(附详细代码): --- ### 一、快速入门指南 🚀 #### 1. **安装与引入** ```html <!-- CDN 引入 --> <script src="https://cdn.jsdelivr.net/npm/fabric@5.3.0/dist/fabric.min.js"></script> <!-- npm 安装 --> npm install fabric ``` ```javascript // ES6 导入 import { fabric } from 'fabric'; ``` #### 2. **基础四步操作** ```javascript // ① 创建画布 const canvas = new fabric.Canvas('canvas-element', { width: 800, height: 600 }); // ② 添加图形对象 const rect = new fabric.Rect({ left: 100, top: 100, fill: 'red', width: 200, height: 100 }); // ③ 添加到画布 canvas.add(rect); // ④ 添加事件监听 rect.on('selected', () => { console.log('矩形被选中!'); }); ``` --- ### 二、核心功能示例 🔥 #### 示例1:创建交互式图形 ```javascript // 创建可拖拽圆形 const circle = new fabric.Circle({ radius: 50, fill: 'blue', stroke: 'black', strokeWidth: 3, selectable: true // 允许选中 }); canvas.add(circle); // 添加点击动画 circle.on('mousedown', () => { circle.animate('scaleX', circle.scaleX > 1 ? 1 : 1.5, { duration: 500, onChange: canvas.renderAll.bind(canvas) }); }); ``` #### 示例2:导入SVG与导出图片 ```javascript // SVG导入 fabric.loadSVGFromURL('image.svg', (objects) => { const group = new fabric.Group(objects); canvas.add(group); }); // 导出PNG document.getElementById('export-btn').addEventListener('click', () => { const dataURL = canvas.toDataURL({ format: 'png' }); const link = document.createElement('a'); link.href = dataURL; link.download = 'design.png'; link.click(); }); ``` --- ### 三、进阶技巧 ⚡ 1. **对象组合与层级** ```javascript // 创建组合 const triangle = new fabric.Triangle({ width: 80, height: 80, fill: 'yellow' }); const text = new fabric.Text('Hello', { fontSize: 30 }); const group = new fabric.Group([triangle, text], { left: 300, top: 200 }); // 调整层级 canvas.sendToBack(triangle); // 置底 canvas.bringToFront(text); // 置顶 ``` 2. **自定义控件(修改锚点)** ```javascript fabric.Object.prototype.controls.deleteControl = new fabric.Control({ x: 0.5, y: -0.5, offsetY: -16, cursorStyle: 'pointer', mouseUpHandler: deleteObject }); function deleteObject(eventData, target) { canvas.remove(target); } ``` --- ### 📚 推荐学习资源 1. **官方中文教程** [Fabric.js 官方教程导航](http://fabricjs.com/fabric-intro-part-1) - 包含 7 部分完整教程(创建对象/动画/事件/序列化等)[^5] 2. **中文社区精选** - [Fabric.js 实战:制作在线白板](https://zhuanlan.zhihu.com/p/462149702) - [SVG 转 Canvas 的完整实现方案](https://juejin.cn/post/7225754365112483897)[^4] --- ### 开发工具支持 🔧 | 功能 | 代码片段 | |---------------------|----------------------------------| | VSCode智能提示 | 安装 `@types/fabric` 类型包 | | 调试模式 | `fabric.config.configure({ stateProperties: [...] });` | | 性能优化 | 使用 `requestRenderAll()` 替代 `renderAll()` | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值