aboutsummaryrefslogtreecommitdiff
path: root/src_js/dragger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src_js/dragger.ts')
-rw-r--r--src_js/dragger.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/src_js/dragger.ts b/src_js/dragger.ts
new file mode 100644
index 0000000..0aeda91
--- /dev/null
+++ b/src_js/dragger.ts
@@ -0,0 +1,42 @@
+
+type MouseHandler = (evt: MouseEvent) => void;
+
+type MoveHandler = (evt: MouseEvent, dx: number, dy: number) => void;
+
+type CreateMoveHandler = (evt: MouseEvent) => MoveHandler;
+
+type Dragger = {
+ initX: number,
+ initY: number,
+ moveHandler: MoveHandler;
+}
+
+
+const draggers: Dragger[] = [];
+
+
+export function mouseDownHandler(
+ createMoveHandlerCb: CreateMoveHandler
+): MouseHandler {
+ return evt => {
+ draggers.push({
+ initX: evt.screenX,
+ initY: evt.screenY,
+ moveHandler: createMoveHandlerCb(evt)
+ });
+ };
+}
+
+
+document.addEventListener('mousemove', evt => {
+ for (const dragger of draggers) {
+ const dx = evt.screenX - dragger.initX;
+ const dy = evt.screenY - dragger.initY;
+ dragger.moveHandler(evt, dx, dy);
+ }
+});
+
+
+document.addEventListener('mouseup', () => {
+ draggers.splice(0);
+});