@visactor/vrender-kits
Version:
## Description
47 lines (46 loc) • 2.71 kB
JavaScript
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