diff options
| author | Jules <jules@asdf.us> | 2016-09-11 10:19:07 -0400 |
|---|---|---|
| committer | Jules <jules@asdf.us> | 2016-09-11 10:19:07 -0400 |
| commit | fbf05115c17163d91e9f649a348e3e6800a22d5e (patch) | |
| tree | 14920be071bce59aa633be8dc47f8281a66a85db /js/vendor/wheel.js | |
init latest version of harp
Diffstat (limited to 'js/vendor/wheel.js')
| -rw-r--r-- | js/vendor/wheel.js | 71 |
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 +} + |
