我們可以透過 Fabricjs 建立自由的畫布讓使用者來操控物件。
今天來看看要如何去變更使用者選取後出現的控制項,以及控制滑鼠拖曳的選擇區塊的樣式。
我們可以透過 Fabricjs 來讓使用者的選擇框變得更特別。
以下就是預設的控制項樣式
我們可以透過在修改再 fabric.Object
的原型讓之後新增的物件都繼承這些設定。
setControlsVisibility(optionsopt)
可設定哪些控制點是要顯示或不顯示。
可以讓使用者無法讓形狀變形,只能使用等比例縮放。
fabric.Object.prototype.setControlsVisibility({
bl: true, // 左下
br: true, // 右下
mb: false, // 下中
ml: false, // 中左
mr: false, // 中右
mt: false, // 上中
tl: true, // 上左
tr: true, // 上右
mtr: true // 旋轉控制鍵
})
結果
但這樣的作法會讓所有繼承這個原型的物件都被更改屬性,我們也可以透過取得物件實例的方法來對單一物件做更改。
// 只對 rect 的控制項做修改
rect.setControls({
...
})
若不想看的所有的邊框,可透過 hasBorders
、hasControls
來直接對所有的邊框和控制點做操作。
rect.hasControls = false
rect.hasBorders = false
透過 object.set
來設定個別控制項樣式。
需注意的是若需要改變控制點的填滿色時,需要把物件的 transparentCorners
屬性設定為 false,不然預設是 true 會無法填入控制點的顏色。
rect.set({
// 將此屬性設定成 false 才有辦法設定填滿設定點
transparentCorners: false,
borderColor: 'red', // 邊框顏色
cornerColor: 'red', // 控制點填滿色
cornerSize: 10, // 控制點大小
cornerStrokeColor: 'blue', // 控制點邊框色
})
透過 cornerStyle
調整控制點的形狀。borderDashArray
可以做邊框的虛線。padding
屬性控制物件和控制項的距離。
rect.set({
...
padding: 10,
borderDashArray: [5, 5],
cornerStyle: 'circle'
})
object.selectable = false
讓物件無法被選擇預設為藍色透明框框來做選擇的拖曳區塊,可以幫助我們群組物件,若今天我們不需要有這個拖曳的功能,透過設定 canvas.selection
這個參數來控制是否要掩飾拖曳區塊。
canvas.selection = false
不會出現拖曳選擇區塊selectionColor
拖曳區塊背景顏色canvas.selectionColor = 'rgba(255,0,0,0.3)'
selectionBorderColor
設定拖曳區塊邊框顏色canvas.selectionBorderColor = 'red'
selectionLineWidth
設定拖曳區塊邊框粗度`canvas.selectionLineWidth = '5'
selectionDashArray
設定拖曳區塊虛線樣式canvas.selectionDashArray = [5, 5]
透過以上設定得到的結果