mirror of
https://gitee.com/dromara/go-view.git
synced 2025-04-24 22:40:11 +08:00
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { listen } from 'dom-helpers'
|
|
import throttle from 'lodash/throttle'
|
|
|
|
let prevMoveXValue = [0, 0]
|
|
let prevMoveYValue = [0, 0]
|
|
|
|
// 拖拽处理
|
|
export const dragCanvas = (e: MouseEvent) => {
|
|
const previewBoxDom = document.querySelector('.go-preview') as HTMLElement
|
|
if (!previewBoxDom || previewBoxDom.style.position !== 'absolute') return
|
|
if (!window.$KeyboardActive?.space) return
|
|
|
|
e.preventDefault()
|
|
e.stopPropagation()
|
|
// @ts-ignore
|
|
document.activeElement?.blur()
|
|
const startX = e.screenX
|
|
const startY = e.screenY
|
|
|
|
const listenMousemove = listen(
|
|
window,
|
|
'mousemove',
|
|
throttle((moveEvent: MouseEvent) => {
|
|
const nx = moveEvent.screenX - startX
|
|
const ny = moveEvent.screenY - startY
|
|
|
|
const [prevMoveX1, prevMoveX2] = prevMoveXValue
|
|
const [prevMoveY1, prevMoveY2] = prevMoveYValue
|
|
|
|
prevMoveXValue = [prevMoveX2, nx]
|
|
prevMoveYValue = [prevMoveY2, ny]
|
|
|
|
// 去除小数部分
|
|
if (previewBoxDom) {
|
|
const oldLeft = previewBoxDom.style.left ? Number(previewBoxDom.style.left.split('px')[0]) : 0
|
|
const oldTop = previewBoxDom.style.top ? Number(previewBoxDom.style.top.split('px')[0]) : 0
|
|
previewBoxDom.style.left =
|
|
oldLeft +
|
|
(prevMoveX2 > prevMoveX1 ? Math.abs(prevMoveX2 - prevMoveX1) : -Math.abs(prevMoveX2 - prevMoveX1)) +
|
|
'px'
|
|
previewBoxDom.style.top =
|
|
oldTop +
|
|
(prevMoveY2 > prevMoveY1 ? Math.abs(prevMoveY2 - prevMoveY1) : -Math.abs(prevMoveY2 - prevMoveY1)) +
|
|
'px'
|
|
}
|
|
}, 20)
|
|
)
|
|
|
|
const listenMouseup = listen(window, 'mouseup', () => {
|
|
prevMoveXValue = [0, 0]
|
|
prevMoveYValue = [0, 0]
|
|
listenMousemove()
|
|
listenMouseup()
|
|
})
|
|
}
|