1.7.3
測試用例
https://jsfiddle.net/human_a/twdgya93/
在這個小提琴,我也嘗試使用以下代碼創建形狀以避免創建空的多邊形,但結果是一樣的:
const polygon = new fabric.Polygon(calcPolygonPoints(8, Math.abs(origX - pointer.x)/2), {
objectCaching: false,
left: origX,
top: origY,
originX: 'center',
originY: 'center',
fill: 'rgba(255,255,255, 1)',
perPixelTargetFind: false,
strokeWidth: 1,
strokeDashArray: [0,0],
objType: 'shape',
stroke: 'rgba(17,17,17,1)',
hasControls: false,
hasBorders: false
})
步驟來重現
點擊綠色按鈕轉到繪圖模式,拖動鼠標在畫布中開始創建形狀,讓鼠標去,然後嘗試選擇新創造形狀。邊界框大小與新多邊形的大小相匹配,但定位不正確。
預期的行爲
如果不是多邊形我嘗試創建任何其他類型的形狀(長方形,圓形或三角形)這工作完全正常的。
實際行爲
由於多邊形使用不同的方法,通過計算它計算的寬度和高度的點,並且由於在創建圖形的寬度/高度被計算出的這種方法創建的形狀後(使用鼠標:移動事件)邊界矩形將無法正確定位。
此外,即使我嘗試更改多邊形的大小(我不想縮放形狀,這是一個壞主意)再次邊界矩形沒有正確定位,您可以嘗試在上面的演示中使用該按鈕旁邊的數字輸入字段。
PS
我沒有寫calcPolygonPoints功能,我發現它的地方,在網絡上,而前,不幸的是,我不能再次找到它的鏈接,貸記本神奇功能的創造者。
非常感謝您@AndreaBogazzi,現在它的工作原理。我把'''newShape。鼠標移動事件中的pathOffset'''以避免創建形狀時的跳躍。另外,這是否意味着如果我決定改變形狀的大小(不縮放),我還必須在那裏運行'''newShape.pathOffset''呢? –