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

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

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

引言

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

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

fabric.js 官方文檔上也是這么說的

viewportTransform :Array

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

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

本文粗略講講 viewportTransform 的用法。

viewportTransform

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

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

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

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

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

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

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

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

和數(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, // 底邊長度
    height: 100, // 底邊到對(duì)角的距離
    fill: 'blue'
  })
  // 文本
  let text = new fabric.Text('雷猴', {
    top: 240,
    left: 100
  })
  // 將矩形、三角形、文本添加到畫布中
  canvas.add(rect, triangle, text)
</script>

縮放

根據(jù)前面的說明我們得知,要縮放畫布可以修改 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 ,所以從視覺上看到的是矩形離畫布左側(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è)的用法都很像,這里就不再啰嗦了。

代碼倉庫

?viewportTransform

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

相關(guān)文章

  • 微信小程序返回多級(jí)頁面的實(shí)現(xiàn)方法

    微信小程序返回多級(jí)頁面的實(shí)現(xiàn)方法

    這篇文章主要介紹了微信小程序返回多級(jí)頁面的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • JavaScript知識(shí):構(gòu)造函數(shù)也是函數(shù)

    JavaScript知識(shí):構(gòu)造函數(shù)也是函數(shù)

    構(gòu)造函數(shù)就是初始化一個(gè)實(shí)例對(duì)象,對(duì)象的prototype屬性是繼承一個(gè)實(shí)例對(duì)象。本文給大家分享javascript構(gòu)造函數(shù)詳解,對(duì)js構(gòu)造函數(shù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2021-08-08
  • 輸入框跟隨文字內(nèi)容適配寬實(shí)現(xiàn)示例

    輸入框跟隨文字內(nèi)容適配寬實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了輸入框跟隨文字內(nèi)容適配寬實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • JavaScript數(shù)組 幾個(gè)常用方法總結(jié)

    JavaScript數(shù)組 幾個(gè)常用方法總結(jié)

    這篇文章主要介紹了JavaScript數(shù)組 幾個(gè)常用方法,主要概述的方法有filter()、map()、sort()、reduce()、forEach(),這些方法都是JavaScript常用到的方法,下面文章內(nèi)容詳細(xì)介紹了他們的語法、參數(shù)、返回值等資料,需要的朋友可以參考一下
    2021-11-11
  • 利用前端HTML+CSS+JS開發(fā)簡單的TODOLIST功能(記事本)

    利用前端HTML+CSS+JS開發(fā)簡單的TODOLIST功能(記事本)

    這篇文章主要介紹了用HTML+CSS+JS做出簡單的TODOLIST(記事本)項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 微信小程序 form組件詳解

    微信小程序 form組件詳解

    這篇文章主要介紹了微信小程序 form組件詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 使用?render?函數(shù)封裝高擴(kuò)展的組件

    使用?render?函數(shù)封裝高擴(kuò)展的組件

    這篇文章主要介紹了使用?render?函數(shù)封裝高擴(kuò)展的組件,vue?官網(wǎng)給出的?render?函數(shù)的例子只能體現(xiàn)?render?函數(shù)的優(yōu)雅的一方面,卻不能看出其擴(kuò)展性,今天就來封裝一個(gè)體現(xiàn)其擴(kuò)展性的組件,需要的朋友可以參考一下
    2021-12-12
  • JS前端架構(gòu)pnpm構(gòu)建Monorepo方式管理demo

    JS前端架構(gòu)pnpm構(gòu)建Monorepo方式管理demo

    這篇文章主要為大家介紹了JS前端架構(gòu)pnpm構(gòu)建Monorepo方式的管理demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 微信小程序 向左滑動(dòng)刪除功能的實(shí)現(xiàn)

    微信小程序 向左滑動(dòng)刪除功能的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序 向左滑動(dòng)刪除功能的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 微信小程序中form 表單提交和取值實(shí)例詳解

    微信小程序中form 表單提交和取值實(shí)例詳解

    這篇文章主要介紹了微信小程序中form 表單提交和取值實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論