| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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;
|