這一章解決兩個缺陷,一是調整一些快捷鍵,使得 Mac 觸控板可以正常操作;二是修復一個 Issue,使得即使素材節點即使被旋轉之後,也能正常觸發磁貼對齊效果,有個小坑需要注意。
請大家動動小手,給我一個免費的 Star 吧~
大家如果發現了 Bug,歡迎來提 Issue 喲~
github原始碼
gitee原始碼
示例地址
快捷鍵、觸控板的最佳化
- 相容 MacOS Command 鍵
- Ctrl(Win)/Command(Mac) + R 重新整理
- 退格鍵也作為刪除鍵
- 縮放以觸控板雙指縮放為準(即滑鼠改為上滾輪放大、下滾輪縮小)
請移步檢視程式碼差異,比較簡單。
旋轉對齊的支援
把磁貼 attract 移動至新增的 AttractTool 中,並新增 AttractDraw 方便除錯
先看看 Issue 反饋的問題:
以水平方向上為例,沒有旋轉之前,邏輯上的對齊線大概如此:
只是,旋轉之後,按原來計算座標+寬高的方式就不合適了:
這裡,符合直覺的,應該如下:
正好,官方有個合適的 API 可以獲得上面黃線的矩形區域資訊,就是 getClientRect。
如果僅考慮單個素材節點,直接獲取該節點的 getClientRect 資訊,替換掉此前的計算邏輯即可。
可是,這裡考慮的還有多選的情況,這個時候就應該透過 transformer 獲取了,這裡有一個坑,如下:
透過 transformer 的 getClientRect,以為獲得左邊的區域資訊,可事實是左邊那樣。
這就導致了,計算的磁貼座標都出現的偏移。
上結論,按 Konva 定結構特點, transformer 必定包含一個 name 為 back 的層,正正是上面左邊需要的區域,獲取該區域資訊就正確了。
// /src/Render/handlers/SelectionHandlers.ts
// 原來透過以下的 x、y、width、height 資訊計算:
const pos = this.render.transformer.position()
const width = this.render.transformer.width()
const height = this.render.transformer.height()
需改為
// /src/Render/handlers/SelectionHandlers.ts
// 現在改為透過以下 rect 資訊的 x、y、width、height 資訊計算:
const rect = this.render.transformer.findOne('.back')!.getClientRect()
最新線上示例,提供了測試除錯用例,可以檢視連線線的變化:
這樣,按新的區域資訊計算就滿足了:
More Stars please!勾勾手指~
原始碼
gitee原始碼
示例地址