50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
/*
|
|
* L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.
|
|
*/
|
|
|
|
L.Handler.ScrollWheelZoom = L.Handler.extend({
|
|
enable: function() {
|
|
if (this._enabled) { return; }
|
|
L.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);
|
|
this._delta = 0;
|
|
this._enabled = true;
|
|
},
|
|
|
|
disable: function() {
|
|
if (!this._enabled) { return; }
|
|
L.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);
|
|
this._enabled = false;
|
|
},
|
|
|
|
_onWheelScroll: function(e) {
|
|
this._delta += L.DomEvent.getWheelDelta(e);
|
|
this._lastMousePos = this._map.mouseEventToContainerPoint(e);
|
|
|
|
clearTimeout(this._timer);
|
|
this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
|
|
|
|
L.DomEvent.preventDefault(e);
|
|
},
|
|
|
|
_performZoom: function() {
|
|
var delta = Math.round(this._delta);
|
|
this._delta = 0;
|
|
|
|
if (!delta) { return; }
|
|
|
|
var center = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),
|
|
zoom = this._map.getZoom() + delta;
|
|
|
|
if (this._map._limitZoom(zoom) == this._map._zoom) { return; }
|
|
|
|
this._map.setView(center, zoom);
|
|
},
|
|
|
|
_getCenterForScrollWheelZoom: function(mousePos, delta) {
|
|
var centerPoint = this._map.getPixelBounds().getCenter(),
|
|
viewHalf = this._map.getSize().divideBy(2),
|
|
centerOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),
|
|
newCenterPoint = centerPoint.add(centerOffset);
|
|
return this._map.unproject(newCenterPoint);
|
|
}
|
|
}); |