summaryrefslogtreecommitdiff
path: root/js/vendor/wheel.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/wheel.js')
-rw-r--r--js/vendor/wheel.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/js/vendor/wheel.js b/js/vendor/wheel.js
new file mode 100644
index 0000000..4155a70
--- /dev/null
+++ b/js/vendor/wheel.js
@@ -0,0 +1,71 @@
+/*
+ usage:
+
+ base.wheel = new wheel({
+ el: document.querySelector("#map"),
+ update: function(e, delta){
+ // do something with delta
+ },
+ })
+
+*/
+
+function wheel (opt) {
+ opt = defaults(opt, {
+ el: document,
+ update: function(e, delta){},
+ propagate: false,
+ locked: false,
+ reversible: true,
+ ratio: 0.02,
+ val: 0,
+ })
+
+ opt.el.addEventListener('wheel', onMouseWheel, false);
+ // opt.el.addEventListener('mousewheel', onMouseWheel, false);
+ opt.el.addEventListener('DOMMouseScroll', onMouseWheel, false);
+
+ function onMouseWheel (e) {
+ if (opt.locked) {
+ return
+ }
+
+ if (! opt.propagate) {
+ e.stopPropagation()
+ e.preventDefault()
+ }
+
+ var deltaX = 0, deltaY = 0;
+
+ // WebKit
+ if ( event.deltaY ) {
+ deltaY -= event.deltaY * opt.ratio
+ deltaX -= event.deltaX * opt.ratio
+ }
+ else if ( event.wheelDeltaY ) {
+ deltaY -= event.wheelDeltaY * opt.ratio
+ deltaX -= event.wheelDeltaX * opt.ratio
+ }
+ // Opera / Explorer 9
+ else if ( event.wheelDelta ) {
+ deltaY -= event.wheelDelta * opt.ratio
+ }
+ // Firefox
+ else if ( event.detail ) {
+ deltaY += event.detail * 2
+ }
+ if (! opt.reversible && (deltaY < 0 && deltaX < 0)) return;
+
+ // opt.val = clamp(opt.val + delta, opt.min, opt.max)
+
+ // deltaX is also passed, but these values tend to be unusable
+ // try http://vvalls.com/assets/test/wheel.html with a trackpad
+ opt.update(e, deltaY, deltaX)
+ }
+
+ opt.lock = function(){ opt.locked = true }
+ opt.unlock = function(){ opt.locked = false }
+
+ return opt
+}
+