/* 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) => 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))