export function longpress(node:HTMLElement, callback:(e:MouseEvent)=>void) {
const TIME_MS = 500;
let timeoutPtr: number;
function handleMouseDown(e:MouseEvent) {
window.addEventListener('mousemove', handleMoveBeforeLong);
timeoutPtr = window.setTimeout(() => {
window.removeEventListener('mousemove', handleMoveBeforeLong);
callback(e);
}, TIME_MS);
}
function handleMoveBeforeLong(e:MouseEvent) {
window.clearTimeout(timeoutPtr);
window.removeEventListener('mousemove', handleMoveBeforeLong);
}
function handleMouseUp(e:MouseEvent) {
window.clearTimeout(timeoutPtr);
window.removeEventListener('mousemove', handleMoveBeforeLong);
}
node.addEventListener('mousedown', handleMouseDown);
node.addEventListener('mouseup', handleMouseUp);
return {
destroy: () => {
node.removeEventListener('mousedown', handleMouseDown);
node.removeEventListener('mouseup', handleMouseUp);
}
};
}