iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Modern Web

一起來玩圖像編輯器:Fabric.js 的實戰修煉系列 第 7

Day7-從頭開始,Fabric.js 畫布的基礎設定

  • 分享至 

  • xImage
  •  

引入 Fabric.js 套件

首先,在你的 HTML 文件中引入 Fabric.js。

引入方式1:你可以從 CDN 引入
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.5.0/fabric.min.js"></script>
引入方式2:也可以用下載套件的方式
$ npm install fabric --save
// or
$ yarn add fabric

詳細方式請見官方文件:fabric.js-installation

如果有使用 TypeScript 的話,要從 @types/fabric 來獲取 TypeScript 的類型定義。

npm install --save-dev @types/fabric

就可以在 js 裡引用了

import { fabric } from 'fabric';

創建畫布

使用原生 Js 初始化

使用原生在初始化時比較簡潔,只要將 canvas 的 dom 與 new fabric.Canvas 綁定就好。

  <canvas id="canvas" width="800" height="600"></canvas>
// 獲取畫布元素
const canvasEl = document.getElementById('canvas');

// 初始化 Fabric.js 畫布
const canvas = new fabric.Canvas(canvasEl, { 
	backgroundColor: '#b5b5b5', 
	selection: true, 
});

使用 React 和 TypeScript 初始化

先開一隻檔案,來存放放置 canvas 的 html 元素與初始化 fabric.js 畫布

// FabricJSCanvas.tsx
import React, { useEffect, useRef } from 'react';
import { fabric } from 'fabric'; // 引入 fabric.js

type FabricJSCanvasProps = {
  updateCanvasContext: (canvas: fabric.Canvas | null) => void;
}

export const FabricJSCanvas = ({ updateCanvasContext }:{updateCanvasContext:FabricJSCanvasProps}) => {
  const canvasEl = useRef<HTMLCanvasElement>(null);

  useEffect(() => {
    if (!canvasEl.current) return;

    // 定義 canvas 選項
    const options: fabric.ICanvasOptions = 
    { 
		backgroundColor: '#b5b5b5', 
		selection: true, 
      // 在這裡添加你的 canvas 配置選項初始值
    };

    // 初始化 Fabric.js 畫布(把 canvasEl 綁定到我們的 new fabric.Canvas 上)
    const canvas = new fabric.Canvas(canvasEl.current, options);
    updateCanvasContext(canvas);

    // 組件卸載時清理資源
    return () => {
      updateCanvasContext(null);
      canvas.dispose();
    };
  }, [updateCanvasContext]); // 添加依賴數組,確保 useEffect 只在組件掛載和卸載時運行

  return <canvas width="300" height="300" ref={canvasEl} />;
};

在要使用他的組件上引入已寫好的 FabricJSCanvas 元件

// App.tsx
import React, { useState } from 'react';
import { FabricJSCanvas } from './FabricJSCanvas';
import { fabric } from 'fabric';

const App: React.FC = () => {
  const [canvas, setCanvas] = useState<fabric.Canvas | null>(null);

  // 更新畫布上下文的函數
  const updateCanvasContext = (canvas: fabric.Canvas | null) => {
    setCanvas(canvas);
  };

  return (
    <div>
      <h1>Fabric.js with React and TypeScript</h1>
      <FabricJSCanvas updateCanvasContext={updateCanvasContext} />
      {/* 你可以在這裡使用 canvas 這參數來進行更多操作 */}
    </div>
  );
};

export default App;

fabric.Canvas 常用的屬性:

最後是畫布的常用屬性列表,這些參數可以讓我們直接更改畫布的屬性

屬性 描述
backgroundColor 設置畫布的背景顏色。
selection 是否允許選擇多個物件,設定 false 的話一次只能選取一個物件。
preserveObjectStacking 當選擇多個物件時,是否保持物件的堆疊順序。
hoverCursor 當滑鼠懸停在物件上時顯示的游標樣式。
defaultCursor 當滑鼠在畫布上但不在物件上時顯示的游標樣式。
isDrawingMode 是否啟用繪圖模式。

這些屬性可以在初始化 Fabric.js 畫布時進行設置(都不用設定也是可以),例如:

const canvas = new fabric.Canvas('canvas', {
  backgroundColor: 'lightgrey',
  selection: true,
  preserveObjectStacking: true,
  hoverCursor: 'pointer',
  defaultCursor: 'default',
  isDrawingMode: false
});

// 如果什麼都不設定
const canvas = new fabric.Canvas('canvas');

這樣,你就可以根據需要配置畫布的各種屬性了。


上一篇
Day6- 小小介紹 Fabric.js 的歷史沿革
下一篇
Day8- 開始來畫形狀了!Fabric.js 基本形狀繪製:矩形、圓形、多邊形...
系列文
一起來玩圖像編輯器:Fabric.js 的實戰修煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言