diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-02-21 04:10:28 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-02-21 04:10:28 +0100 |
| commit | 9f68262f9eb4720b4d6466e1cf5cf9c0edb9c286 (patch) | |
| tree | 30dab1f29749031680d19c70a6b4a88a553fa9ba /client/lib/mouse.js | |
smash
Diffstat (limited to 'client/lib/mouse.js')
| -rw-r--r-- | client/lib/mouse.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/client/lib/mouse.js b/client/lib/mouse.js new file mode 100644 index 0000000..b4fa961 --- /dev/null +++ b/client/lib/mouse.js @@ -0,0 +1,57 @@ +/* + +mouse.register({ + down: (x, y) => { + }, + move: (x, y, dx, dy) => { + }, + up: (x, y) => { + }, +}) + +*/ + + +let fns = { + down: [], + move: [], + up: [], +} + +export default { + register: (callbacks) => { + callbacks.down && fns.down.push(callbacks.down) + callbacks.move && fns.move.push(callbacks.move) + callbacks.up && fns.up.push(callbacks.up) + } +} + +let x, y, dragging = false + +function down(e){ + x = e.pageX + y = e.pageY + dragging = true + fns.down.map(f => f(x, y)) +} +function move(e){ + if (!dragging) return + let dx = e.pageX - x + let dy = e.pageY - y + x = e.pageX + y = e.pageY + dragging = true + fns.move.map(f => f(x, y, dx, dy)) +} +function up(e){ + dragging = false + fns.up.map(f => f(x, y)) +} + +function touch(f){ return (e) => f(e.touches[0]) } +document.body.addEventListener("mousedown", down) +document.body.addEventListener("mousemove", move) +document.body.addEventListener("mouseup", up) +document.body.addEventListener("touchstart", touch(down)) +document.body.addEventListener("touchmove", touch(move)) +document.body.addEventListener("touchup", touch(up)) |
