UNPKG

flex-splitter-directive

Version:

Dead simple pane-splitter control based on flexbox.

35 lines (28 loc) 1.4 kB
import { mover } from "./mover"; addEventListener("pointerdown", (pointerDownEvent: PointerEvent) => { const separator = pointerDownEvent.target as HTMLElement; const container = separator.parentElement; if (!container || !pointerDownEvent.isPrimary || pointerDownEvent.button !== 0 || separator.getAttribute("role") !== "separator") { return; } const horizontal = container.hasAttribute("data-flex-splitter-horizontal"); if (!horizontal && !container.hasAttribute("data-flex-splitter-vertical")) { return; } const pointerId = pointerDownEvent.pointerId; const move = mover(separator, horizontal); const onPointerMove: (event: PointerEvent) => void = horizontal ? (event) => event.pointerId === pointerId && move(event.clientX - pointerDownEvent.clientX) : (event) => event.pointerId === pointerId && move(event.clientY - pointerDownEvent.clientY); const onLostPointerCapture = (event: PointerEvent) => { if (event.pointerId === pointerId) { separator.removeEventListener("pointermove", onPointerMove); separator.removeEventListener("lostpointercapture", onLostPointerCapture); } } onPointerMove(pointerDownEvent); separator.addEventListener("lostpointercapture", onLostPointerCapture) separator.addEventListener("pointermove", onPointerMove); separator.setPointerCapture(pointerId); pointerDownEvent.preventDefault() });