Canvas框架-FabricJS簡介

2020-12-06 愛動漫的程式設計師

簡介

Fabric是一個強大而簡單的JS Canvas庫,我們能通過使用它實現在Canvas上創建、填充圖形、給圖形填充漸變顏色。 組合圖形(包括組合圖形、圖形文字、圖片等)等一系列功能。簡單來說我們可以通過使用Fabric從而以較為簡單的方式實現較為複雜的Canvas功能

官網文檔地址:http://fabricjs.com/docs/github地址:https://github.com/fabricjs/fabric.jsDemo地址:http://fabricjs.com/demos/

起步

引入CDN引入:推薦使用bootcssCDN引入,bootcssCDN提供包括fabric等在內的眾多庫的引入服務npm安裝:npm install fabric --save

初始化demo

一個簡單的canvas demo

通過fabric.Canvas獲取到canvas元素,並可以對canvas進行相應的設置,既可以通過獲取已存在的canvas元素,fabric也支持創建canvas元素,同樣也能對其進行相應操作

與原生的異同之前有一個需求是點滑鼠左鍵並進行拖動,要實現實時在canvas上進行畫圖於是分別用元生canvas和fabric製作了該功能,接下來我們對比下兩者的異同

原生canvas
fabric.canvas

通過對比我們可以發現,跟原生寫法比起來fabric寫法更加直觀也更加簡潔設置相關屬性也比原生的更加方便,並且在畫線的過程中也顯得更加的流程

API介紹

繪製圖形fabric.Rect({}) 方形

- left:0, // 距離畫布左側的距離

- top:0, // 距離畫布上邊的距離

- fill:'oink', // 背景顏色

- width:10, // 寬度

- height:10 // 高度

- 更多屬性不一一贅述

fabric.Circle({}) 圓形

- 同方形

fabric.Triangle({}) 三角形

- 同方形

fabric.Pat({M x y L x1 y1 L x2 y2 z}) 多邊形

- M表示起點,從坐標為x、y點起步,畫到L x1、y1點 ,然後在畫到L x2、y2點,最後z表示閉合改圖形

fabric

- Image() 通過元素插入圖片

- fromURL() 通過URL插入圖片

事件在fabric中,提供了很多不同的事件,下面介紹一部分常見的事件更多更具體的事件可以參考http://fabricjs.com/docs/fabric.Object.html

mouse(滑鼠事件)

- move:按下且移動

- down:按下時

- up:按下抬起時

- dblclick:雙擊時

- mouseout:離開元素時

- mousewheel:滾輪事件

selection

- created 初次選中圖層

- updated 圖層選擇變化

- cleared 清空圖層選中

after- render畫布重繪後

object(對象)

- selected:被選中

- deselected:取消選中

- moving:移動

- rotating:旋轉

- added:添加

- removed:移除

- modified:調整

set與getobj.set()通常設置屬性的方式有兩種,第一種是在繪製的時候添加進去。

另一種是通過set方法設置

例:obj.set({color:''})

注意:需canvas.add(obj)刷新頁面

obj.get()

有set方法自然就有get方法

例:obj.getXXX 獲取相應屬性的屬性值

組別fabric.Group([x,y],{})

Group屬性可以將x與y兩個fabric實例組合成一個組別,在頁面上顯示出來

序列化和反序列化toJSON(序列化)

- 導出畫布信息

loadFromJSON(反序列化)

- 將導出的信息還原成畫布

注意事項obj.renderAll()所有圖層的操作之後,都需要調用這個方法刷新

obj.add()將場景加入畫布中

操作案例

圖層移動// 上移圖層

obj.bringForward();

// 下移圖層

obj.sendBackwards();

// 使用canvas對象的moveTo方法,移至圖層到指定位置

card.moveTo(obj, index);

// 旋轉圖層

obj.rotate(angle)

// 翻轉圖層,沿著X軸或者Y軸翻轉

obj.set({ scaleX/Y: -this.selectedObj.scaleX/Y,})

// 刪除圖層

obj.remove()在進行相應操作後都需要canvas.renderAll()重新刷新畫布,否則操作不生效

查詢組件canvas.item(index:number)

查找第index個添加到canvas的組件

總結

通過總結和使用體驗下來,Fabric的功能顯得十分的強大,可以實現多樣的效果,但由於時間局限,只是稍微整理了一下Fabric,但是Fabric還有許多的功能沒有使用到,這部分的內容就需要在後續的開發過程中繼續深入挖掘了,或者通過查看文檔來加深了解,不過個人感覺官網文檔並不顯得那麼友好,還沒有官網demo顯得友好

相關焦點

  • 用HTML5把Canvas緩衝區內容輸出到屏幕
    對於哪些只基於用戶輸入而重畫遊戲內容的靜態遊戲,可以修改這個框架類和去除遊戲循環。幾乎每個遊戲平臺都有不同版本的sokoban,但是我還沒有看到任何使用canvas元素的應用。${PageNumber}  canvas入門  讓我們僅使用單個canvas元素,開始創建我們的HTML5頁面。
  • html5 canvas畫布繪製矩形和圓形
    html5為我們提供了非常有特色的標籤,canvas標籤為我們可以實現在網頁中畫畫提供了便利,接下來我們列舉他的常用操作。新建一個html5的文檔,建立一個canvas畫布,設置長寬,這裡需要特別注意,canvas標籤可以在標籤內設置width,height,也能通過css來設置,但是通過css來設置的標籤,當繪製圖形的時候會變形,所以我們建議直接在標籤內設置。
  • HTML 5 Canvas 遞歸畫樹
    新建Index.html,代碼如下:<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>canvas tree</title> </head> <body> <script
  • matplotlib如何實現圖形繪製在tkinter的Canvas中?
    下面就是最重要的tkinter和matplotlib集成部分,matplotlib提供FigureCanvasTkAgg對象,只需三行代碼,實現圖形繪製在tkinter的Canvas中:canvas_l = FigureCanvasTkAgg(figure_l, frame_l)# 用draw代替canvas_l.draw()canvas_l.get_tk_widget
  • 八大瘋狂的 HTML5 Canvas 及 WebGL 動畫效果
    原文地址:http://favbulous.com/post/895/8-crazy-animations-withwebgl-and-html5-canvas
  • JS+Canvas 帶你體驗「偶消奇不消」的智商挑戰
    層疊拼圖Plus 微信小遊戲採用js+canvas實現,沒有使用任何遊戲引擎,對於初學者來說,也比較容易入門。接下來,我將通過以下幾個點循序漸進的講解層疊拼圖Plus 微信小遊戲的實現。如何解決 Canvas 繪圖模糊?
  • Unity 遊戲框架搭建 2019 (八十) UIRoot Prefab
    LoadPanel(string panelName, UILayer layer)        {            var panelPrefab = Resources.Load<GameObject>(panelName);            var panel = Instantiate(panelPrefab);            var canvasObj
  • 如何用 JavaScript+Canvas 開發一款超級燒腦小遊戲?
    可參考微信官方縮放策略調整另外,需要注意的是,這裡的 canvas 是由 weapp-adapter 預先調用 wx.createCanvas() 創建一個上屏 Canvas,並暴露為一個全局變量 canvas。如何繪製任意多邊形圖形?
  • 《聯合國氣候變化公框架公約》(COP)簡介
    1994年3月21日,《聯合國氣候變化框架公約》(UNFCCC)正式生效。  1995年4月7日,在柏林舉行了UNFCCC締約方第一次大會(COP1)。因為UNFCCC只是一個框架性的公約,其有效的實施需要更具體的機制。
  • 媒介素養理論框架下的受眾研究新論
    媒介素養理論框架下的受眾研究新論 2018年05月21日 09:54 來源:《現代傳播》 作者:張開 字號 內容摘要:【摘要】中國大陸媒介素養研究已歷經20年的發展,無論是因應新媒體時代的呼喚,還是回應該領域研究進程中出現的問題
  • 開源機器學習框架:Scikit-learn API簡介
    簡介對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基於Python的科學計算工具包。
  • 導電金屬-有機框架材料
    內容簡介:一、電子導電MOF材料1.1合成方法水熱/溶劑熱法已經廣泛用於導電MOF材料的合成,因為其高壓高溫環境能提升反應物的溶解性,自然冷卻後容易獲得MOF微晶或者單晶。MOF裡的電荷傳輸取決於軌道的空間和能量的交疊程度:增強軌道重疊能有效提升MOF框架的載流子遷移能力。
  • 《韋氏兒童智力量表—第五版》完善理論框架
    《韋氏兒童智力量表—第五版》完善理論框架 2016年10月10日 16:28 來源:中國社會科學網-中國社會科學報 作者: 字號 內容摘要:英文美國版本的《韋氏兒童智力量表—第五版
  • 媒體框架與受眾框架的比較分析
    通過比較媒體框架與受眾框架證實我們的預設:電視媒體在報導特定事件時只呈現此事件的一部分,受眾在收看電視新聞報導時也會有一定的偏向,他們各自有自己特定的框架。本文試從框架理論角度,通過對魏則西事件的電視新聞報導進行個案分析,探討從媒介框架到受眾框架的過程。 二、框架理論 框架理論屬於傳播學的經典理論之一。
  • 搜狗開源srpc:自研高性能通用RPC框架
    9月15日,作為Workflow最重要的生態項目——srpc,一個基於其打造的輕量級RPC框架,也在GitHub上開源了。GitHub搜索「sogou srpc」即可找到該項目。一個性能更好的thrift/brpcsrpc與thrift/brpc是協議與IDL均互通的。
  • 上海科技大學章躍標課組:噻唑並噻唑基共價有機框架的光碟機動析氫
    共價有機框架(Covalent Organic Frameworks,COFs)是利用強的共價鍵將有機分子砌塊連結成二維或三維網絡結構的晶態多孔材料,可通過功能基元的選擇和連結方式的改變來調控吸光性能和電子能帶結構,以及構建載流子輸運通道而成為新型有機半導體光催化劑。
  • 教程| 斯坦福CS231n 2017最新課程:李飛飛詳解深度學習的框架實現...
    主要內容有:CPU 和 GPU 的對比;深度學習框架簡介;TensorFlow 和 PyTorch 的實例;以及各種深度學習框架的比較。一、 CPU 和 GPUCPU:核芯的數量更少;但是每一個核芯的速度更快,性能更強;更適用於處理連續性(sequential)任務。