From ae5cdc75b4c7baa47d45e3d7cb30843d5eb791e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 11 Jul 2012 17:35:50 +0200 Subject: [PATCH] the mousewheel handler zooms the map by default --- src/ol/handler/MouseWheel.js | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/ol/handler/MouseWheel.js b/src/ol/handler/MouseWheel.js index 6a551db20c..50d293e33a 100644 --- a/src/ol/handler/MouseWheel.js +++ b/src/ol/handler/MouseWheel.js @@ -1,8 +1,10 @@ /** - * @fileoverview Map Mouse Wheel Handler. + * @fileoverview Mouse Wheel Handler. * * Provides a class for listening to mousewheel events on a DOM element * and re-dispatching to a map instance. + * + * The default behabior is zooming the map. */ goog.provide('ol.handler.MouseWheel'); @@ -34,7 +36,39 @@ ol.handler.MouseWheel = function(map, elt) { goog.events.listen(handler, goog.events.MouseWheelHandler.EventType.MOUSEWHEEL, - handleMouseWheel); + this.handleMouseWheel, false, this); }; goog.inherits(ol.handler.MouseWheel, goog.Disposable); + +/** + * @param {goog.events.MouseWheelEvent} e + */ +ol.handler.MouseWheel.prototype.handleMouseWheel = function(e) { + e.position = goog.style.getRelativePosition(e, this.elt_); + e.type = 'mousewheel'; + var rt = goog.events.dispatchEvent(this.map_, e); + if (rt) { + this.defaultBehavior(e); + } +}; + +/** + * @param {goog.events.MouseWheelEvent} e + */ +ol.handler.MouseWheel.prototype.defaultBehavior = function(e) { + var me = this; + if (e.deltaY === 0 || me.zoomBlocked_) { + return; + } + me.zoomBlocked_ = window.setTimeout(function() { + me.zoomBlocked_ = null; + }, 200); + + var map = me.map_, + step = e.deltaY / Math.abs(e.deltaY); + map.setZoom(map.getZoom() - step, e.position); + + // We don't want the page to scroll. + e.preventDefault(); +};