summaryrefslogtreecommitdiff
path: root/client/lib/mouse.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-03-03 05:38:35 +0100
committerJules Laplace <julescarbon@gmail.com>2018-03-03 05:38:35 +0100
commit636b62aa6d0d77e19a4b7bb3c039924eeb217a71 (patch)
tree042fa3404738e347f8d60f419fa600aa6030c61b /client/lib/mouse.js
hall demo
Diffstat (limited to 'client/lib/mouse.js')
-rw-r--r--client/lib/mouse.js67
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))