目前開源的元素變化操作元件有不少,但其功能樣式並不一定符合每個開發人員的需求,所以不如將其核心的操作功能抽離出來作為一個工具包來使用,開發人員就可以基於該工具包來開發自己的元素變化元件。
那麼就從最常見的用位置、大小、旋轉、縮放等元素變化操作功能開始開發,開源一個元素的基本操作工具庫 Dom Transform Tool。
npm i dom-transform-tool
使用ES按需引入
import { domDrag } from 'dom-transform-tool';
manual
參數直接手動調整元素的樣式;customStyle
參數來自定義樣式;position
、transform
、translate
等等,因此每個方法也將提供一個參數用於選擇調整元素時使用的樣式;customRender
來修改每次調整後的具體數值,如修改為rem
、%
等;disableUpdate
為true,便可在callback
回調函數中自己操作元素;disablePointerEnd
設置為true,然後通過方法的返回值獲取釋放函數,自定義處理事件的釋放,如(endPointerHandler = domResize(),endPointerHandler為釋放函數);使用domDrag時可以使用指針點擊元素進行拖曳移動,使用direction
參數還可以控制元素僅在橫軸或縱軸移動。
function handleTargetDrag(event: PointerEvent) {
domDrag({
target: event.target,
pointer: event,
});
}
domResize內置多達15種不同的調整方向,可以直接針對不同的單方向、雙方向、三方向進行調整大小。除此之外還可設置lockAspectRatio
鎖定可調整橫軸和縱軸時的大小比例,crossAxis
控制在變小調整到最小時可否越軸調整到反方向變大。
function handleTargetResize(event: PointerEvent) {
domResize({
target: event.target,
pointer: event,
offsetType: 'translate',
});
}
domRotate可用於拖曳時讓元素跟隨指針位置進行旋轉。
function handleTargetRotate(event: PointerEvent) {
domRotate({
target: event.target,
pointer: event,
});
}
domScale是用於調整元素的縮放大小,但目前未提供指針進行調整的功能。
function handleTargetScale(event: WheelEvent, scaleTarget: HTMLElement) {
const { deltaY } = event;
const scaleValue = deltaY > 0 ? 0.1 : -0.1;
domScale({
target: scaleTarget,
manual: { scale: scaleValue },
});
}
至此,這幾個基本功能就介紹到這,當然這些方法的功能並未完全開發完整,如邊緣檢測、自動吸附等功能也希望能夠在後續開發出來。另外也將提供更多的示例在文檔中進行參考使用。
github.com/nixwai/dom-transform-tool