|
@@ -95,24 +95,25 @@ function computePos(type: "width" | "height", value: number | string) {
|
|
|
let isLock = false
|
|
|
let toolMoveY = 0 // 移动的距离
|
|
|
function drag(el: HTMLElement) {
|
|
|
- function mousedown(e: MouseEvent) {
|
|
|
- e.stopPropagation()
|
|
|
- e.preventDefault()
|
|
|
+ function mousedown(e: MouseEvent | TouchEvent) {
|
|
|
+ const isTouchEv = isTouchEvent(e)
|
|
|
+ const event = isTouchEv ? e.touches[0] : e
|
|
|
isLock = false
|
|
|
isMask.value = true
|
|
|
const parentElement = el
|
|
|
const parentElementRect = parentElement.getBoundingClientRect()
|
|
|
- const downX = e.clientX
|
|
|
- const downY = e.clientY
|
|
|
+ const downX = event.clientX
|
|
|
+ const downY = event.clientY
|
|
|
// const clientWidth = document.documentElement.clientWidth
|
|
|
const clientHeight = document.documentElement.clientHeight
|
|
|
// const minLeft = 0
|
|
|
const minTop = 0
|
|
|
// const maxLeft = clientWidth - parentElementRect.width
|
|
|
const maxTop = clientHeight - parentElementRect.height
|
|
|
- function onMousemove(e: MouseEvent) {
|
|
|
+ function onMousemove(e: MouseEvent | TouchEvent) {
|
|
|
+ const event = isTouchEvent(e) ? e.touches[0] : e
|
|
|
// let moveX = parentElementRect.left + (e.clientX - downX)
|
|
|
- let moveY = parentElementRect.top + (e.clientY - downY)
|
|
|
+ let moveY = parentElementRect.top + (event.clientY - downY)
|
|
|
// let moveY = e.clientY - downY
|
|
|
// moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX
|
|
|
moveY = moveY < minTop ? minTop : moveY > maxTop ? maxTop : moveY
|
|
@@ -120,8 +121,8 @@ function drag(el: HTMLElement) {
|
|
|
document.documentElement.style.setProperty("--toolTranslateY", `${moveY}px`)
|
|
|
|
|
|
// 计算移动的距离
|
|
|
- const cX = e.clientX - downX
|
|
|
- const cY = e.clientY - downY
|
|
|
+ const cX = event.clientX - downX
|
|
|
+ const cY = event.clientY - downY
|
|
|
|
|
|
// 如果移动距离超过一定阈值,则认为是拖动
|
|
|
if (Math.abs(cX) > 3 || Math.abs(cY) > 3) {
|
|
@@ -129,14 +130,18 @@ function drag(el: HTMLElement) {
|
|
|
}
|
|
|
}
|
|
|
function onMouseup() {
|
|
|
- document.removeEventListener("mousemove", onMousemove)
|
|
|
- document.removeEventListener("mouseup", onMouseup)
|
|
|
+ document.removeEventListener(isTouchEv ? "touchmove" : "mousemove", onMousemove)
|
|
|
+ document.removeEventListener(isTouchEv ? "touchend" : "mouseup", onMouseup)
|
|
|
isMask.value = false
|
|
|
}
|
|
|
- document.addEventListener("mousemove", onMousemove)
|
|
|
- document.addEventListener("mouseup", onMouseup)
|
|
|
+ document.addEventListener(isTouchEv ? "touchmove" : "mousemove", onMousemove)
|
|
|
+ document.addEventListener(isTouchEv ? "touchend" : "mouseup", onMouseup)
|
|
|
}
|
|
|
- el.addEventListener("mousedown", mousedown, true)
|
|
|
+ el.addEventListener("mousedown", mousedown)
|
|
|
+ el.addEventListener("touchstart", mousedown)
|
|
|
+}
|
|
|
+function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent {
|
|
|
+ return window.TouchEvent && e instanceof window.TouchEvent
|
|
|
}
|
|
|
//重新计算位置 居中
|
|
|
function refreshPos() {
|