|
@@ -104,19 +104,22 @@ export default function useDrag(
|
|
|
|
|
|
// 拖动
|
|
|
function drag(el: HTMLElement, parentElement: HTMLElement, pos: Ref<posType>) {
|
|
|
- function mousedown(e: MouseEvent) {
|
|
|
+ function onDown(e: MouseEvent | TouchEvent) {
|
|
|
+ const isTouchEv = isTouchEvent(e);
|
|
|
+ const event = isTouchEv ? e.touches[0] : e;
|
|
|
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 maxLeft = clientWidth - parentElementRect.width;
|
|
|
const maxTop = clientHeight - parentElementRect.height;
|
|
|
const minLeft = 0;
|
|
|
const minTop = 0;
|
|
|
- function onMousemove(e: MouseEvent) {
|
|
|
- let moveX = parentElementRect.left + (e.clientX - downX);
|
|
|
- let moveY = parentElementRect.top + (e.clientY - downY);
|
|
|
+ function onMove(e: MouseEvent | TouchEvent) {
|
|
|
+ const event = isTouchEvent(e) ? e.touches[0] : e;
|
|
|
+ let moveX = parentElementRect.left + (event.clientX - downX);
|
|
|
+ let moveY = parentElementRect.top + (event.clientY - downY);
|
|
|
moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX;
|
|
|
moveY = moveY < minTop ? minTop : moveY > maxTop ? maxTop : moveY;
|
|
|
pos.value = {
|
|
@@ -124,16 +127,22 @@ function drag(el: HTMLElement, parentElement: HTMLElement, pos: Ref<posType>) {
|
|
|
left: moveX
|
|
|
};
|
|
|
}
|
|
|
- function onMouseup() {
|
|
|
- document.removeEventListener('mousemove', onMousemove);
|
|
|
- document.removeEventListener('mouseup', onMouseup);
|
|
|
+ function onUp() {
|
|
|
+ document.removeEventListener(
|
|
|
+ isTouchEv ? 'touchmove' : 'mousemove',
|
|
|
+ onMove
|
|
|
+ );
|
|
|
+ document.removeEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
|
|
|
}
|
|
|
- document.addEventListener('mousemove', onMousemove);
|
|
|
- document.addEventListener('mouseup', onMouseup);
|
|
|
+ document.addEventListener(isTouchEv ? 'touchmove' : 'mousemove', onMove);
|
|
|
+ document.addEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
|
|
|
}
|
|
|
- el.addEventListener('mousedown', mousedown);
|
|
|
+ el.addEventListener('mousedown', onDown);
|
|
|
+ el.addEventListener('touchstart', onDown);
|
|
|
+}
|
|
|
+function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent {
|
|
|
+ return window.TouchEvent && e instanceof window.TouchEvent;
|
|
|
}
|
|
|
-
|
|
|
// 缓存
|
|
|
const localStorageName = 'dragCachePos';
|
|
|
function getCachePos(useIdDargClass: string): null | undefined | posType {
|