diff options
Diffstat (limited to 'client/lib/mouse.js')
| -rw-r--r-- | client/lib/mouse.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/client/lib/mouse.js b/client/lib/mouse.js new file mode 100644 index 0000000..990b8ef --- /dev/null +++ b/client/lib/mouse.js @@ -0,0 +1,67 @@ +/* + +mouse.register({ + down: (x, y) => { + }, + move: (x, y, dx, dy) => { + }, + up: (x, y) => { + }, +}) + +*/ + + +let fns = { + down: [], + move: [], + up: [], +} + +document.body.scrollTo(0,0) +document.body.parentNode.scrollTo(0,0) +document.body.addEventListener("scroll", function(e){ e.preventDefault() }) +document.body.parentNode.addEventListener("scroll", function(e){ e.preventDefault() }) + +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) => { + e.preventDefault() + 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)) |
