最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

聽上去很高級的樣子,但其實(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 常見例子就是拖拽畫布(下一篇會講到)。

本文粗略講講 viewportTransform 的用法。

viewportTransform

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

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

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

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

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

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

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

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

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

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

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

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

<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, // 底邊到對角的距離
    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ù),自己動手試試吧~

平移

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

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ù)就是往左移動。

y軸方向平移

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

setViewportTransform(vpt)

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

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

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

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

代碼倉庫

?viewportTransform

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

相關(guān)文章

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

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

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

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

    構(gòu)造函數(shù)就是初始化一個實(shí)例對象,對象的prototype屬性是繼承一個實(shí)例對象。本文給大家分享javascript構(gòu)造函數(shù)詳解,對js構(gòu)造函數(shù)相關(guān)知識感興趣的朋友一起學(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ù)組 幾個常用方法總結(jié)

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

    這篇文章主要介紹了JavaScript數(shù)組 幾個常用方法,主要概述的方法有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ì),對大家的學(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ò)展性,今天就來封裝一個體現(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
  • 微信小程序 向左滑動刪除功能的實(shí)現(xiàn)

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

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

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

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

最新評論

黑龙江省| 武山县| 湾仔区| 万全县| 兴隆县| 孟州市| 肃北| 两当县| 西峡县| 安溪县| 泰和县| 泸西县| 广丰县| 辽宁省| 长泰县| 普宁市| 陆川县| 韶山市| 宁乡县| 邓州市| 长岭县| 黄浦区| 绥阳县| 措美县| 南丹县| 丹阳市| 翁牛特旗| 桦甸市| 延长县| 宣城市| 永济市| 时尚| 顺平县| 桃江县| 交城县| 壤塘县| 浙江省| 丹江口市| 普陀区| 水城县| 乌恰县|