From 507adef9b2ebab24f7678d41ed5c9115e961ef5c Mon Sep 17 00:00:00 2001
From: Dante <duanjl.china@gmail.com>
Date: Wed, 24 Mar 2021 07:55:48 +0800
Subject: [PATCH] fix: corrected horizontal slip judgment (#8388)

---
 src/composables/use-touch.ts |  3 ++-
 test/event.ts                | 18 +++++++++++++++---
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/composables/use-touch.ts b/src/composables/use-touch.ts
index 7becdd053..86c28d056 100644
--- a/src/composables/use-touch.ts
+++ b/src/composables/use-touch.ts
@@ -42,7 +42,8 @@ export function useTouch() {
 
   const move = ((event: TouchEvent) => {
     const touch = event.touches[0];
-    deltaX.value = touch.clientX - startX.value;
+    // Fix: Safari back will set clientX to negative number
+    deltaX.value = touch.clientX < 0 ? 0 : touch.clientX - startX.value;
     deltaY.value = touch.clientY - startY.value;
     offsetX.value = Math.abs(deltaX.value);
     offsetY.value = Math.abs(deltaY.value);
diff --git a/test/event.ts b/test/event.ts
index ae8b7f94a..6c73e2a8e 100644
--- a/test/event.ts
+++ b/test/event.ts
@@ -57,10 +57,22 @@ export function triggerDrag(
     | VueWrapper<ComponentPublicInstance<any, any, any>>
     | DOMWrapper<Element>
     | HTMLElement,
-  x = 0,
-  y = 0
+  relativeX = 0,
+  relativeY = 0
 ) {
-  trigger(el, 'touchstart', 0, 0);
+  let x = relativeX;
+  let y = relativeY;
+  let startX = 0;
+  let startY = 0;
+  if (relativeX < 0) {
+    startX = Math.abs(relativeX);
+    x = 0;
+  }
+  if (relativeY < 0) {
+    startY = Math.abs(relativeY);
+    y = 0;
+  }
+  trigger(el, 'touchstart', startX, startY);
   trigger(el, 'touchmove', x / 4, y / 4);
   trigger(el, 'touchmove', x / 3, y / 3);
   trigger(el, 'touchmove', x / 2, y / 2);