UNPKG

start-drag

Version:

Listens and composes mouse or touch events to dragging callbacks

48 lines (47 loc) 1.47 kB
// src/index.ts function startDrag(event, container, onMove, onEnd) { const isTouch = event instanceof TouchEvent; let initX = 0; let initY = 0; const move = (event2, init = false) => { const rect = container.getBoundingClientRect(); const defaultView = container.ownerDocument.defaultView; const offsetX = rect.left + defaultView.scrollX; const offsetY = rect.top + defaultView.scrollY; const isTouch2 = event2 instanceof TouchEvent; const x = (isTouch2 ? event2.changedTouches[0].pageX : event2.pageX) - offsetX; const y = (isTouch2 ? event2.changedTouches[0].pageY : event2.pageY) - offsetY; if (init) { initX = x; initY = y; } onMove(event2, x, y, x - initX, y - initY); }; move(event, true); const destroy = () => { if (isTouch) { document.removeEventListener("touchmove", move); document.removeEventListener("touchend", stop); } else { document.removeEventListener("mousemove", move); document.removeEventListener("mouseup", stop); } }; const stop = (event2) => { destroy(); if (typeof onEnd === "function") { onEnd(event2); } }; if (isTouch) { document.addEventListener("touchmove", move, { passive: true }); document.addEventListener("touchend", stop); } else { document.addEventListener("mousemove", move, { passive: true }); document.addEventListener("mouseup", stop); } return destroy; } export { startDrag };