UNPKG

@visactor/vrender-kits

Version:
47 lines (46 loc) 2.71 kB
export class DragNDrop { constructor(rootNode) { this.onPointerDown = event => { const target = event.target, rootNode = this.rootNode, isRoot = target === rootNode; if (target && !isRoot) { let currentDroppable, dragstartTriggered = !1; function handlePointerMove(moveEvent) { if (dragstartTriggered || (moveEvent.type = "dragstart", null == target || target.dispatchEvent(moveEvent), dragstartTriggered = !0), moveEvent.type = "drag", null == target || target.dispatchEvent(moveEvent), !isRoot) { target.attribute.pickable = !1; const elemBelow = (null == rootNode ? void 0 : rootNode.pick(moveEvent.global.x, moveEvent.global.y)).graphic; target.attribute.pickable = !0, currentDroppable !== elemBelow && (currentDroppable && (moveEvent.type = "dragleave", moveEvent.target = currentDroppable, currentDroppable.dispatchEvent(moveEvent)), elemBelow && (moveEvent.type = "dragenter", moveEvent.target = elemBelow, elemBelow.dispatchEvent(moveEvent)), currentDroppable = elemBelow, currentDroppable && (moveEvent.type = "dragover", moveEvent.target = currentDroppable, currentDroppable.dispatchEvent(moveEvent))); } } null == rootNode || rootNode.addEventListener("pointermove", handlePointerMove); const stopDragging = function() { dragstartTriggered && (currentDroppable && (event.type = "drop", event.target = currentDroppable, currentDroppable.dispatchEvent(event)), event.type = "dragend", target.dispatchEvent(event), dragstartTriggered = !1), null == rootNode || rootNode.removeEventListener("pointermove", handlePointerMove); }; target.addEventListener("pointerup", stopDragging, { once: !0 }), target.addEventListener("pointerupoutside", stopDragging, { once: !0 }); } }, this.rootNode = rootNode, this.initEvents(); } initEvents() { var _a; null === (_a = this.rootNode) || void 0 === _a || _a.addEventListener("pointerdown", this.onPointerDown); } removeEvents() { var _a; null === (_a = this.rootNode) || void 0 === _a || _a.removeEventListener("pointerdown", this.onPointerDown); } release() { this.removeEvents(), this.rootNode = null; } } //# sourceMappingURL=drag.js.map