diff options
| author | bozo.kopic <bozo@kopic.xyz> | 2022-11-13 03:39:02 +0100 |
|---|---|---|
| committer | bozo.kopic <bozo@kopic.xyz> | 2022-11-13 03:39:02 +0100 |
| commit | b30a00a9713fd52865129132317beb6fa875017c (patch) | |
| tree | c367859b2cfaf820c88eb4822e566d06144ecd4b /src_js/dragger.ts | |
| parent | 26b2dee4ef3f0a00bd6fb2989ada48ad9b054972 (diff) | |
type script
Diffstat (limited to 'src_js/dragger.ts')
| -rw-r--r-- | src_js/dragger.ts | 42 |
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); +}); |
