lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
38 lines • 1.32 kB
JavaScript
import { useEffect, useRef } from "preact/hooks";
import { stopPropagation } from "../utils/stopPropagation";
import { CLICK_TIME } from "../../globals";
export default (cb) => {
const elRef = useRef(null);
useEffect(() => {
const el = elRef.current;
if (!el || !cb)
return;
stopPropagation(el);
let downTime = 0;
let downX = 0;
let downY = 0;
const handleMouseDown = (e) => {
downTime = Date.now();
downX = e.clientX;
downY = e.clientY;
};
const handleMouseUp = (e) => {
const upTime = Date.now();
const deltaTime = upTime - downTime;
const deltaX = Math.abs(e.clientX - downX);
const deltaY = Math.abs(e.clientY - downY);
downTime = upTime;
downX = e.clientX;
downY = e.clientY;
deltaTime < CLICK_TIME && deltaX < 5 && deltaY < 5 && cb(e);
};
el.addEventListener("mousedown", handleMouseDown);
el.addEventListener("mouseup", handleMouseUp);
return () => {
el.removeEventListener("mousedown", handleMouseDown);
el.removeEventListener("mouseup", handleMouseUp);
};
}, []);
return elRef;
};
//# sourceMappingURL=useClick.js.map