欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Fabric.js 實(shí)現(xiàn)變換視窗示例詳解

 更新時(shí)間:2022年09月14日 15:30:06   作者:德育處主任  
這篇文章主要為大家介紹了Fabric.js 實(shí)現(xiàn)變換視窗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

fabric.js 可以通過(guò) viewportTransform 屬性配置畫布的視窗屬性。

聽(tīng)上去很高級(jí)的樣子,但其實(shí)這是原生 canvas 就已經(jīng)存在的東西,fabric.jsviewportTransform 也就直接復(fù)用了原生 canvastransform() 。

fabric.js 官方文檔上也是這么說(shuō)的

viewportTransform :Array

The transformation (a Canvas 2D API transform matrix) which focuses the viewport

修改 viewportTransform 常見(jiàn)例子就是拖拽畫布(下一篇會(huì)講到)。

本文粗略講講 viewportTransform 的用法。

viewportTransform

viewportTransform 是一個(gè)數(shù)組,里面有6個(gè)元素,默認(rèn)值是 [1, 0, 0, 1, 0, 0]

從下標(biāo)0開(kāi)始,它們分別代表:

  • [0]: 水平縮放(x軸方向)
  • [1]: 水平傾斜(x軸方向)
  • [2]: 垂直傾斜(y軸方向)
  • [3]: 垂直縮放(y軸方向)
  • [4]: 水平移動(dòng)(x軸方向)
  • [5]: 垂直移動(dòng)(y軸方向)

你沒(méi)看錯(cuò),我也沒(méi)寫錯(cuò),上面列出來(lái)的元素就是代表這個(gè)意思,這和原生 canvastransform() 方法接收參數(shù)的順序是一樣的,看上去就是這么“凌亂”~

其實(shí)這涉及到線性代數(shù)的知識(shí),在 canvas 中,transform() 方法也可以稱為“變換矩陣”。

我們把 viewportTransform 的6個(gè)元素分別用 a, b, c, d, e, f 來(lái)代替:

viewportTransform[a, b, c, d, e, f] 。

然后這樣排列一下,看上去會(huì)不會(huì)覺(jué)得沒(méi)那么“凌亂”了。

和數(shù)學(xué)有關(guān)的知識(shí)暫時(shí)先不講 (我也講得不好) 。

學(xué) fabric.js 最主要是動(dòng)手實(shí)踐,寫多幾次慢慢就能領(lǐng)悟其中原理。

viewportTransform 的6個(gè)參數(shù)主要實(shí)現(xiàn)3個(gè)功能:縮放、傾斜、平移。

為了演示效果,我先初始化畫布,并添加2個(gè)圖形(矩形和三角形)。

<canvas id="canvasBox" width="600" height="600" style="border: 1px solid #ccc;"></canvas>
<script>
  // 初始化畫布
  let canvas = new fabric.Canvas('canvasBox', {
    width: 400,
    height: 400
  })
  // 矩形
  let rect = new fabric.Rect({
    top: 10,
    left: 10,
    width: 80,
    height: 80,
    fill: 'pink'
  })
  // 三角形
  let triangle = new fabric.Triangle({
    top: 100,
    left: 100,
    width: 80, // 底邊長(zhǎng)度
    height: 100, // 底邊到對(duì)角的距離
    fill: 'blue'
  })
  // 文本
  let text = new fabric.Text('雷猴', {
    top: 240,
    left: 100
  })
  // 將矩形、三角形、文本添加到畫布中
  canvas.add(rect, triangle, text)
</script>

縮放

根據(jù)前面的說(shuō)明我們得知,要縮放畫布可以修改 viewportTransform 下標(biāo)為 03 的元素。

如果希望x軸方向放大1倍可以這樣做

// 省略部分代碼
canvas.viewportTransform[0] = 2

如果想讓y軸方向縮小1倍可以這樣做

// 省略部分代碼
canvas.viewportTransform[3] = 0.5

斜切

修改畫布斜切,x軸方向是修改 viewportTransform 下標(biāo) 1 的元素,y軸方向修改下標(biāo)為 2 的元素。

x軸方向斜切:

// 省略部分代碼
canvas.viewportTransform[1] = 0.1

也可以設(shè)置成負(fù)數(shù)

// 省略部分代碼
canvas.viewportTransform[1] = -0.1

y軸方向斜切

// 省略部分代碼
canvas.viewportTransform[2] = 0.2

y軸方向的斜切也可以設(shè)置成負(fù)數(shù),自己動(dòng)手試試吧~

平移

平移只需設(shè)置 viewportTransform 最后2個(gè)元素即可,非常好記。

x軸方向平移

// 省略部分代碼
canvas.viewportTransform[4] = 10

看粉色的矩形,矩形默認(rèn)的位置是 top 10, left 10,上面的代碼把畫布往右平移了 10 ,所以從視覺(jué)上看到的是矩形離畫布左側(cè)有20的距離,離頂部有10的距離。

除了設(shè)置正數(shù),還可以設(shè)置負(fù)數(shù),canvas.viewportTransform[4] 設(shè)置成負(fù)數(shù)就是往左移動(dòng)。

y軸方向平移

// 省略部分代碼
canvas.viewportTransform[5] = 10

setViewportTransform(vpt)

除了有 viewportTransform ,還有 setViewportTransform 方法,這個(gè)方法的參數(shù)接收一個(gè)數(shù)組,數(shù)組元素的意義和 viewportTransform 差不多。

需要注意的是,viewportTransform 是屬性。

setViewportTransform 是方法,這個(gè)方法是要傳入?yún)?shù)的。

因?yàn)檫@兩個(gè)的用法都很像,這里就不再啰嗦了。

代碼倉(cāng)庫(kù)

?viewportTransform

以上就是Fabric.js 實(shí)現(xiàn)變換視窗示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Fabric.js 變換視窗的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Blob實(shí)現(xiàn)與File?DataURL?canvas相互轉(zhuǎn)換示例

    Blob實(shí)現(xiàn)與File?DataURL?canvas相互轉(zhuǎn)換示例

    這篇文章主要為大家介紹了Blob實(shí)現(xiàn)與File?DataURL?canvas相互轉(zhuǎn)換的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • JavaScript數(shù)組詳細(xì)歸納

    JavaScript數(shù)組詳細(xì)歸納

    JavaScript 數(shù)組用于在單一變量中存儲(chǔ)多個(gè)值,數(shù)組是一種特殊的變量,它能夠一次存放一個(gè)以上的值。下面文章小編就來(lái)詳細(xì)歸納一下JavaScript數(shù)組,需要的朋友可以參考一下
    2021-09-09
  • 微信小程序 toast組件詳細(xì)介紹

    微信小程序 toast組件詳細(xì)介紹

    這篇文章主要介紹了 微信小程序 toast組件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解

    JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解

    這篇文章主要為大家介紹了JS實(shí)現(xiàn)刷新網(wǎng)頁(yè)后之前瀏覽位置保持不變示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 避免地獄async?await的使用及原理解析

    避免地獄async?await的使用及原理解析

    這篇文章主要為大家介紹了避免地獄async?await的使用場(chǎng)景及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 微信小程序(二)Window 配置詳細(xì)介紹

    微信小程序(二)Window 配置詳細(xì)介紹

    這篇文章主要介紹了微信小程序(二)Window 配置詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 微信小程序 支付后臺(tái)java實(shí)現(xiàn)實(shí)例

    微信小程序 支付后臺(tái)java實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了微信小程序 支付后臺(tái)java實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 微信小程序(二十)slider組件詳細(xì)介紹

    微信小程序(二十)slider組件詳細(xì)介紹

    這篇文章主要介紹了 微信小程序(二十)slider組件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • JavaScript兩張圖搞懂原型鏈

    JavaScript兩張圖搞懂原型鏈

    這篇文章主要分享JavaScript的兩張?jiān)玩湀D,我們上一篇文章介紹了JavaScript中的原型,為什么不將原型鏈一起介紹了呢?因?yàn)镴avaScript中的原型鏈?zhǔn)且粋€(gè)難點(diǎn),也是一個(gè)面試必問(wèn)的考點(diǎn),現(xiàn)在就來(lái)學(xué)習(xí)一下具體內(nèi)容吧
    2021-12-12
  • Javascript設(shè)計(jì)模式之原型模式詳細(xì)

    Javascript設(shè)計(jì)模式之原型模式詳細(xì)

    這篇文章主要介紹了Javascript設(shè)計(jì)模式之原型模式,原型模式用于在創(chuàng)建對(duì)象時(shí),通過(guò)共享某個(gè)對(duì)象原型的屬性和方法,從而達(dá)到提高性能、降低內(nèi)存占用、代碼復(fù)用的效果。下面小編將詳細(xì)介紹 ,需要的朋友可以參考下
    2021-09-09

最新評(píng)論