UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

51 lines (39 loc) 1.43 kB
import { useEffect, useState } from "preact/hooks" export default (cb?: (e: MouseEvent) => void) => { const [el, setEl] = useState<HTMLDivElement | null>(null) useEffect(() => { if (!el || !cb) return let downTime = 0 let downX = 0 let downY = 0 const handleMouseDown = (e: MouseEvent) => { e.stopPropagation() downTime = Date.now() downX = e.clientX downY = e.clientY } const handleMouseUp = (e: MouseEvent) => { e.stopPropagation() 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 < 300 && deltaX < 5 && deltaY < 5 && cb(e) } const handleClick = (e: MouseEvent) => { e.stopPropagation() } el.addEventListener("mousedown", handleMouseDown) el.addEventListener("mouseup", handleMouseUp) el.addEventListener("click", handleClick) return () => { el.removeEventListener("mousedown", handleMouseDown) el.removeEventListener("mouseup", handleMouseUp) el.removeEventListener("click", handleClick) } }, [el]) return setEl }