/* usage: base.wheel = new wheel({ el: document.querySelector("#map"), update: function(val, delta){ // do something with val }, }) */ function wheel (opt) { opt = defaults(opt, { propagate: false, locked: false, ratio: 0.02, val: 0, min: -Infinity, max: Infinity, el: document, fn: function(){} }) el.addEventListener('mousewheel', onMouseWheel, false); el.addEventListener('DOMMouseScroll', onMouseWheel, false); function onMouseWheel (e) { if (opt.locked) { return } if (! opt.propagate) { e.stopPropagation() e.preventDefault() } var delta = 0; // WebKit if ( event.wheelDeltaY ) { delta -= event.wheelDeltaY * opt.ratio } // Opera / Explorer 9 else if ( event.wheelDelta ) { delta -= event.wheelDelta * opt.ratio } // Firefox else if ( event.detail ) { delta += event.detail * 2 } if (! opt.reversible && delta < 0) return; opt.val = clamp(opt.val + delta, opt.min, opt.max) opt.update(opt.val, delta) } return opt }