pay-sdk-react
Version:
A cross-platform payment SDK for React, supporting Alipay, WeChat Pay, PayPal, Stripe, Payssion, and Airwallex, compatible with H5, PC, and App environments.
60 lines • 1.97 kB
JavaScript
import { useRef } from "react";
const MIN_DISTANCE = 10;
function getDirection(x, y) {
if (x > y && x > MIN_DISTANCE) {
return "horizontal";
}
if (y > x && y > MIN_DISTANCE) {
return "vertical";
}
return "";
}
export function useTouch() {
const startX = useRef(0);
const startY = useRef(0);
const deltaX = useRef(0);
const deltaY = useRef(0);
const offsetX = useRef(0);
const offsetY = useRef(0);
const direction = useRef("");
const isVertical = () => direction.current === "vertical";
const isHorizontal = () => direction.current === "horizontal";
const reset = () => {
deltaX.current = 0;
deltaY.current = 0;
offsetX.current = 0;
offsetY.current = 0;
direction.current = "";
};
const start = event => {
var _event$touches$0$clie, _event$touches$, _event$touches$0$clie2, _event$touches$2;
reset();
startX.current = (_event$touches$0$clie = (_event$touches$ = event.touches[0]) === null || _event$touches$ === void 0 ? void 0 : _event$touches$.clientX) !== null && _event$touches$0$clie !== void 0 ? _event$touches$0$clie : 0;
startY.current = (_event$touches$0$clie2 = (_event$touches$2 = event.touches[0]) === null || _event$touches$2 === void 0 ? void 0 : _event$touches$2.clientY) !== null && _event$touches$0$clie2 !== void 0 ? _event$touches$0$clie2 : 0;
};
const move = event => {
const touch = event.touches[0];
if (!touch) return;
deltaX.current = touch.clientX - startX.current;
deltaY.current = (touch === null || touch === void 0 ? void 0 : touch.clientY) - startY.current;
offsetX.current = Math.abs(deltaX.current);
offsetY.current = Math.abs(deltaY.current);
if (!direction.current) {
direction.current = getDirection(offsetX.current, offsetY.current);
}
};
return {
move,
start,
reset,
startX,
startY,
deltaX,
deltaY,
offsetX,
offsetY,
direction,
isVertical,
isHorizontal
};
}