PNet/js/graphics/tragable.ts
2023-06-27 09:19:06 +02:00

38 lines
No EOL
1.2 KiB
TypeScript

export class Tragable {
static getRootSVG(elem: SVGElement): SVGSVGElement {
while (!(elem instanceof SVGSVGElement)) {
if (!(elem instanceof SVGElement)) throw new Error("Not in an SVG");
elem = elem.parentElement as any;
}
return elem;
}
#moveCB: (event: MouseEvent) => any = () => { };
#clickCB: (event: MouseEvent) => any = () => { };
initTrag(element: SVGElement) {
let svg = Tragable.getRootSVG(element);
let selected = false;
element.addEventListener('mousedown', () => {
selected = true;
});
svg.addEventListener('mousemove', event => {
if (selected) this.#moveCB(event);
});
svg.addEventListener('mouseup', () => {
selected = false;
});
svg.addEventListener('mouseleave', event => {
selected = false;
});
element.addEventListener('click', event => {
if (!selected) this.#clickCB(event);
});
}
onMove(cb: (event: MouseEvent) => any) {
this.#moveCB = cb;
}
onClick(cb: (event: MouseEvent) => any) {
this.#clickCB = cb;
}
}