摘要:使用一段時(shí)間了,總得來說,是一款非常強(qiáng)大的矢量圖工具,官方文檔也算豐富,但文檔組織形式不太好,而且少部分設(shè)計(jì)不太一致,還是需要整理一下。是最基礎(chǔ)的對(duì)象,針對(duì)標(biāo)簽做的封裝,可以管理內(nèi)部繪制的所有對(duì)象。
使用一段時(shí)間了,總得來說,是一款非常強(qiáng)大的矢量圖工具,官方文檔也算豐富,但文檔組織形式不太好,而且少部分api設(shè)計(jì)不太一致,還是需要整理一下。
Canvascanvas是最基礎(chǔ)的對(duì)象,針對(duì)
canvasElement = document.getElementById(canvasEle); ctx = canvasElement.getContext("2d");
新建canvas對(duì)象的時(shí)候,可以指定寬高:
canvas = new fabric.Canvas(canvasElement, { selection: false, width: 800, height:600 });
這里指定的寬高會(huì)覆蓋css中設(shè)置的。注意這種創(chuàng)建對(duì)象的形式,F(xiàn)abric.js里基本上都是類似的,類名表示要?jiǎng)?chuàng)建的對(duì)象類型,第一個(gè)參數(shù)是必要的數(shù)據(jù),第二個(gè)參數(shù)是各種選項(xiàng)。
所有對(duì)canvas的修改,包括在其中添加刪除對(duì)象,以及對(duì)象參數(shù)的修改,都需要調(diào)用渲染方法才能顯示出來:
canvas.renderAll();基本形狀
線條-Line, 圓-Circle, 矩形-Rectangel等幾何圖形,都屬于基本形狀。
所有基本形狀,都有對(duì)應(yīng)的類,這樣就可以通過類實(shí)例的屬性和方法來控制它們的位置、顏色、大小等樣式。所有類都繼承自O(shè)bject類,有一些公共的屬性和方法。
創(chuàng)建下面是畫線的例子(給出兩個(gè)頂點(diǎn)坐標(biāo)):
var line = new fabric.Line([x1, y1, x2, y2], { strokeWidth: 2, //線寬 stroke: rgba(255,0,0,0.8), //線的顏色 selectable: false }); canvas.add(line);
畫圓的例子(頂點(diǎn)和半徑是在選項(xiàng)里的),這里left和top其實(shí)就是(x,y),應(yīng)該是借用了css里的命名。
var circle = new fabric.Circle({ radius: 2, left: left, top: top, originX: "center", originY: "center", fill: rgba(0,200,0,0.8), strokeWidth: 1, stroke: rgba(255,0,0,0.8), selectable: false }; canvas.add(circle);
從這里可以看出,和創(chuàng)建canvas類似,第一個(gè)參數(shù)是這個(gè)類專用的(比如畫直線的時(shí)候傳的起止點(diǎn)坐標(biāo)),第二個(gè)參數(shù)是通用選項(xiàng),如果沒有專用參數(shù),那么第一個(gè)參數(shù)就直接是通用選項(xiàng)。所有創(chuàng)建完的形狀,只有通過canvas的add方法加入創(chuàng)景,才能顯示出來。
控制left和top是每種Object都有的屬性,至于它到底指圖形中哪一個(gè)點(diǎn)的坐標(biāo),由originX和originY這組參數(shù)決定,它們相當(dāng)于文本編輯軟件里的對(duì)齊方式,originX有三種可選值:left,center, right;originY也有三種可選值:top, center, bottom。
它們的示意圖如下:
http://fabricjs.com/test/misc...
如果希望每種對(duì)象缺省原點(diǎn)都在中心,可以這樣設(shè)置:
fabric.Object.prototype.originX = fabric.Object.prototype.originY = "center"
width和height也是可以直接存取的屬性,顧名思義,表示長(zhǎng)和寬(所有形狀都是有外接矩形的,所以可以用長(zhǎng)和寬來控制大?。?/p>
除了上面那幾個(gè)可以直接存取的屬性,大部分屬性需要使用get/set方法讀寫,比如:
line.left = pointer.x; line.top = pointer.y; line.set("stroke", startColor); line.set("height", 20);
網(wǎng)上有些文章會(huì)寫成line.stroke=color,或者line.setProperty("stroke",color)這樣的形式,都是不能生效的,可能是早期版本的表達(dá)方式。
ImageImage跟其他形狀類似,都是Object的子類,最大的區(qū)別在于,圖像文件的加載是異步的,所以對(duì)Image的后續(xù)操作,都要在回調(diào)中完成。
var bkImage = fabric.Image.fromURL(imgUrl,function(img) { canvas.add(img); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108281.html
摘要:可以對(duì)每一個(gè)對(duì)象使用動(dòng)畫,克隆,修改屬性,事件監(jiān)聽,碰撞檢測(cè)等。修改屬性需及時(shí)渲染才能展示出效果。每次更改了對(duì)象的位置,大小時(shí)比如,,若要感知該對(duì)象的具體位置用于對(duì)象間碰撞邊緣檢測(cè),或事件響應(yīng),需要使用方法重設(shè)對(duì)象的四個(gè)角坐標(biāo)。 fabricjs是一個(gè)canvas的庫(kù),原本canvas的操作主要基于上下文,需要使用者自己從0開始去實(shí)現(xiàn)一些基本功能。而canvas庫(kù)文件封裝好了許多便利的...
摘要:為提供所缺少的對(duì)象模型交互和一整套其他不可或缺的工具。為什么要使用提供一個(gè)好的畫布能力但是不夠友好。就是為此而開發(fā),它主要就是用對(duì)象的方式去編寫代碼。代表線,的意思是使用鋼筆畫一條線,從坐標(biāo)畫到坐標(biāo)。代表讓圖形閉合路徑。 簡(jiǎn)介 什么是Fabric.js? Fabric.js是一個(gè)可以簡(jiǎn)化Canvas程序編寫的庫(kù)。 Fabric.js為Canvas提供所缺少的對(duì)象模型, svg pars...
摘要:最近做了一個(gè)翻書效果的項(xiàng)目來總結(jié)一下實(shí)現(xiàn)過程和遇到的一些問題供自己以后快速解決問題希望也能幫到同樣遇到此類問題的同學(xué)如果有更好的方法希望你能分享給我地址插件問題都是些自己覺的比較難解決的比較片面如有其他疑問可以留言交流或者當(dāng)你從官網(wǎng)下載 最近做了一個(gè)翻書效果的項(xiàng)目, 來總結(jié)一下實(shí)現(xiàn)過程和遇到的一些問題, 供自己以后快速解決問題, 希望也能幫到同樣遇到此類問題的同學(xué), 如果有更好的方法,...
閱讀 3320·2021-11-24 09:39
閱讀 3887·2021-11-22 09:34
閱讀 4839·2021-08-11 11:17
閱讀 1072·2019-08-29 13:58
閱讀 2597·2019-08-28 18:18
閱讀 553·2019-08-26 12:24
閱讀 840·2019-08-26 12:14
閱讀 749·2019-08-26 11:58