|
|
@@ -0,0 +1,88 @@
|
|
|
+import {useEffect, useState} from "react";
|
|
|
+import {toast} from "react-toastify";
|
|
|
+import {localStorageGet, localStorageSet} from "@utils/helpers";
|
|
|
+const objInfo={
|
|
|
+ timer:null
|
|
|
+}
|
|
|
+const useEdgeGesture = () => {
|
|
|
+ const [isSideGesture, setIsSideGesture] = useState(false);
|
|
|
+ const getSidedGesture = () => {
|
|
|
+ let isguesture=parseInt(localStorageGet("IOS_GUESTURE",0));
|
|
|
+ if (isguesture===1){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ const setSidedGesture = (isGuesture=0) => {
|
|
|
+ setIsSideGesture(isGuesture);
|
|
|
+ localStorageSet("IOS_GUESTURE",isGuesture);
|
|
|
+ }
|
|
|
+ let isEdgeGesture=false;
|
|
|
+ let isTouchingEdge = false;
|
|
|
+ const handleGesture=(e)=>{
|
|
|
+ if (global.isIOS){
|
|
|
+ // 获取触摸点的坐标
|
|
|
+ const touchX = e.touches[0].clientX;
|
|
|
+ const touchY = e.touches[0].clientY;
|
|
|
+
|
|
|
+ // 假设边缘手势区域的阈值为 20px
|
|
|
+ const edgeThreshold = 20;
|
|
|
+
|
|
|
+ // 检查触摸点是否在屏幕边缘
|
|
|
+ const isGesture = touchX < edgeThreshold || touchX > window.innerWidth - edgeThreshold ||
|
|
|
+ touchY < edgeThreshold || touchY > window.innerHeight - edgeThreshold;
|
|
|
+ isEdgeGesture=isGesture;
|
|
|
+ if (isEdgeGesture) {
|
|
|
+ isTouchingEdge = false;
|
|
|
+ // 如果触摸点在边缘区域内
|
|
|
+ removeTouchMove();
|
|
|
+ document.addEventListener("touchmove",handleGestureMove);
|
|
|
+ } else {
|
|
|
+ // 如果触摸点不在边缘区域内,重置触摸边缘的状态
|
|
|
+ isTouchingEdge = false;
|
|
|
+ setSidedGesture(0);
|
|
|
+ removeTouchMove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const handleGestureMove=(e)=>{
|
|
|
+ if (isEdgeGesture){
|
|
|
+ if (!isTouchingEdge) {
|
|
|
+ // 如果之前没有触摸边缘,记录触摸边缘的状态,并设置一个定时器
|
|
|
+ isTouchingEdge = true;
|
|
|
+ resetTimer();
|
|
|
+ objInfo.timer=setTimeout(function() {
|
|
|
+ if (isTouchingEdge) {
|
|
|
+ // console.log('用户执行了边缘手势');
|
|
|
+ // // 这里可以执行相应的逻辑
|
|
|
+ setSidedGesture(1);
|
|
|
+ // toast.success("11111111");
|
|
|
+ isTouchingEdge = false;
|
|
|
+ removeTouchMove();
|
|
|
+ }
|
|
|
+ }, 60); // 设置一个时间阈值,例如 300 毫秒
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const resetTimer=()=>{
|
|
|
+ if (objInfo.timer!=null){
|
|
|
+ clearTimeout(objInfo.timer);
|
|
|
+ objInfo.timer=null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const removeTouchMove=()=>{
|
|
|
+ document.removeEventListener('touchmove', handleGestureMove);
|
|
|
+ }
|
|
|
+ useEffect(() => {
|
|
|
+ // 监听 touchstart 事件
|
|
|
+ document.addEventListener('touchstart', handleGesture);
|
|
|
+ // document.addEventListener('touchmove', handleGesture);
|
|
|
+ return ()=>{
|
|
|
+ document.removeEventListener('touchstart', handleGesture);
|
|
|
+ removeTouchMove();
|
|
|
+ resetTimer();
|
|
|
+ }
|
|
|
+ }, []);
|
|
|
+ return {isSideGesture,setIsSideGesture,getSidedGesture,setSidedGesture};
|
|
|
+}
|
|
|
+export default useEdgeGesture;
|