Merge pull request #7682 from fredj/MouseWheelZoom_condition

Add new condition to MouseWheelZoom interaction
This commit is contained in:
Frédéric Junod
2018-01-08 13:16:40 +01:00
committed by GitHub
6 changed files with 43 additions and 23 deletions

View File

@@ -1,14 +1,14 @@
import Map from '../src/ol/Map.js';
import _ol_View_ from '../src/ol/View.js';
import {defaults as defaultInteractions} from '../src/ol/interaction.js';
import _ol_interaction_MouseWheelZoom_ from '../src/ol/interaction/MouseWheelZoom.js';
import MouseWheelZoom from '../src/ol/interaction/MouseWheelZoom.js';
import TileLayer from '../src/ol/layer/Tile.js';
import _ol_source_OSM_ from '../src/ol/source/OSM.js';
var map = new Map({
interactions: defaultInteractions({mouseWheelZoom: false}).extend([
new _ol_interaction_MouseWheelZoom_({
new MouseWheelZoom({
constrainResolution: true // force zooming to a integer zoom
})
]),

View File

@@ -2772,6 +2772,7 @@ olx.interaction.ModifyOptions.prototype.wrapX;
/**
* @typedef {{constrainResolution: (boolean|undefined),
* condition: (ol.EventsConditionType|undefined),
* duration: (number|undefined),
* timeout: (number|undefined),
* useAnchor: (boolean|undefined)}}
@@ -2779,6 +2780,15 @@ olx.interaction.ModifyOptions.prototype.wrapX;
olx.interaction.MouseWheelZoomOptions;
/**
* A function that takes an {@link ol.MapBrowserEvent} and returns a boolean
* to indicate whether that event should be handled. Default is {@link ol.events.condition.always}.
* @type {ol.EventsConditionType|undefined}
* @api
*/
olx.interaction.MouseWheelZoomOptions.prototype.condition;
/**
* Animation duration in milliseconds. Default is `250`.
* @type {number|undefined}

View File

@@ -9,7 +9,7 @@ import DragRotate from './interaction/DragRotate.js';
import DragZoom from './interaction/DragZoom.js';
import _ol_interaction_KeyboardPan_ from './interaction/KeyboardPan.js';
import _ol_interaction_KeyboardZoom_ from './interaction/KeyboardZoom.js';
import _ol_interaction_MouseWheelZoom_ from './interaction/MouseWheelZoom.js';
import MouseWheelZoom from './interaction/MouseWheelZoom.js';
import _ol_interaction_PinchRotate_ from './interaction/PinchRotate.js';
import _ol_interaction_PinchZoom_ from './interaction/PinchZoom.js';
@@ -93,7 +93,7 @@ export function defaults(opt_options) {
var mouseWheelZoom = options.mouseWheelZoom !== undefined ?
options.mouseWheelZoom : true;
if (mouseWheelZoom) {
interactions.push(new _ol_interaction_MouseWheelZoom_({
interactions.push(new MouseWheelZoom({
constrainResolution: options.constrainResolution,
duration: options.zoomDuration
}));

View File

@@ -3,6 +3,7 @@
*/
import {inherits} from '../index.js';
import _ol_ViewHint_ from '../ViewHint.js';
import condition from '../events/condition.js';
import {easeOut} from '../easing.js';
import EventType from '../events/EventType.js';
import _ol_has_ from '../has.js';
@@ -25,10 +26,10 @@ var MAX_DELTA = 1;
* @param {olx.interaction.MouseWheelZoomOptions=} opt_options Options.
* @api
*/
var _ol_interaction_MouseWheelZoom_ = function(opt_options) {
var MouseWheelZoom = function(opt_options) {
Interaction.call(this, {
handleEvent: _ol_interaction_MouseWheelZoom_.handleEvent
handleEvent: MouseWheelZoom.handleEvent
});
var options = opt_options || {};
@@ -63,6 +64,12 @@ var _ol_interaction_MouseWheelZoom_ = function(opt_options) {
*/
this.constrainResolution_ = options.constrainResolution || false;
/**
* @private
* @type {ol.EventsConditionType}
*/
this.condition_ = options.condition ? options.condition : condition.always;
/**
* @private
* @type {?ol.Coordinate}
@@ -115,7 +122,7 @@ var _ol_interaction_MouseWheelZoom_ = function(opt_options) {
};
inherits(_ol_interaction_MouseWheelZoom_, Interaction);
inherits(MouseWheelZoom, Interaction);
/**
@@ -126,7 +133,10 @@ inherits(_ol_interaction_MouseWheelZoom_, Interaction);
* @this {ol.interaction.MouseWheelZoom}
* @api
*/
_ol_interaction_MouseWheelZoom_.handleEvent = function(mapBrowserEvent) {
MouseWheelZoom.handleEvent = function(mapBrowserEvent) {
if (!this.condition_(mapBrowserEvent)) {
return true;
}
var type = mapBrowserEvent.type;
if (type !== EventType.WHEEL && type !== EventType.MOUSEWHEEL) {
return true;
@@ -172,11 +182,11 @@ _ol_interaction_MouseWheelZoom_.handleEvent = function(mapBrowserEvent) {
if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {
this.mode_ = Math.abs(delta) < 4 ?
_ol_interaction_MouseWheelZoom_.Mode_.TRACKPAD :
_ol_interaction_MouseWheelZoom_.Mode_.WHEEL;
MouseWheelZoom.Mode_.TRACKPAD :
MouseWheelZoom.Mode_.WHEEL;
}
if (this.mode_ === _ol_interaction_MouseWheelZoom_.Mode_.TRACKPAD) {
if (this.mode_ === MouseWheelZoom.Mode_.TRACKPAD) {
var view = map.getView();
if (this.trackpadTimeoutId_) {
clearTimeout(this.trackpadTimeoutId_);
@@ -243,7 +253,7 @@ _ol_interaction_MouseWheelZoom_.handleEvent = function(mapBrowserEvent) {
/**
* @private
*/
_ol_interaction_MouseWheelZoom_.prototype.decrementInteractingHint_ = function() {
MouseWheelZoom.prototype.decrementInteractingHint_ = function() {
this.trackpadTimeoutId_ = undefined;
var view = this.getMap().getView();
view.setHint(_ol_ViewHint_.INTERACTING, -1);
@@ -254,7 +264,7 @@ _ol_interaction_MouseWheelZoom_.prototype.decrementInteractingHint_ = function()
* @private
* @param {ol.PluggableMap} map Map.
*/
_ol_interaction_MouseWheelZoom_.prototype.handleWheelZoom_ = function(map) {
MouseWheelZoom.prototype.handleWheelZoom_ = function(map) {
var view = map.getView();
if (view.getAnimating()) {
view.cancelAnimations();
@@ -277,7 +287,7 @@ _ol_interaction_MouseWheelZoom_.prototype.handleWheelZoom_ = function(map) {
* to zoom to the center of the map
* @api
*/
_ol_interaction_MouseWheelZoom_.prototype.setMouseAnchor = function(useAnchor) {
MouseWheelZoom.prototype.setMouseAnchor = function(useAnchor) {
this.useAnchor_ = useAnchor;
if (!useAnchor) {
this.lastAnchor_ = null;
@@ -289,8 +299,8 @@ _ol_interaction_MouseWheelZoom_.prototype.setMouseAnchor = function(useAnchor) {
* @enum {string}
* @private
*/
_ol_interaction_MouseWheelZoom_.Mode_ = {
MouseWheelZoom.Mode_ = {
TRACKPAD: 'trackpad',
WHEEL: 'wheel'
};
export default _ol_interaction_MouseWheelZoom_;
export default MouseWheelZoom;

View File

@@ -4,14 +4,14 @@ import _ol_View_ from '../../../../src/ol/View.js';
import Event from '../../../../src/ol/events/Event.js';
import _ol_has_ from '../../../../src/ol/has.js';
import Interaction from '../../../../src/ol/interaction/Interaction.js';
import _ol_interaction_MouseWheelZoom_ from '../../../../src/ol/interaction/MouseWheelZoom.js';
import MouseWheelZoom from '../../../../src/ol/interaction/MouseWheelZoom.js';
describe('ol.interaction.MouseWheelZoom', function() {
var map, interaction;
beforeEach(function() {
interaction = new _ol_interaction_MouseWheelZoom_();
interaction = new MouseWheelZoom();
map = new Map({
target: createMapDiv(100, 100),
interactions: [interaction],
@@ -66,7 +66,7 @@ describe('ol.interaction.MouseWheelZoom', function() {
var origHasFirefox = _ol_has_.FIREFOX;
_ol_has_.FIREFOX = true;
map.once('postrender', function() {
expect(interaction.mode_).to.be(_ol_interaction_MouseWheelZoom_.Mode_.TRACKPAD);
expect(interaction.mode_).to.be(MouseWheelZoom.Mode_.TRACKPAD);
_ol_has_.FIREFOX = origHasFirefox;
done();
});
@@ -85,7 +85,7 @@ describe('ol.interaction.MouseWheelZoom', function() {
var origHasFirefox = _ol_has_.FIREFOX;
_ol_has_.FIREFOX = false;
map.once('postrender', function() {
expect(interaction.mode_).to.be(_ol_interaction_MouseWheelZoom_.Mode_.TRACKPAD);
expect(interaction.mode_).to.be(MouseWheelZoom.Mode_.TRACKPAD);
_ol_has_.FIREFOX = origHasFirefox;
done();
});

View File

@@ -8,7 +8,7 @@ import _ol_has_ from '../../../src/ol/has.js';
import {defaults as defaultInteractions} from '../../../src/ol/interaction.js';
import DoubleClickZoom from '../../../src/ol/interaction/DoubleClickZoom.js';
import Interaction from '../../../src/ol/interaction/Interaction.js';
import _ol_interaction_MouseWheelZoom_ from '../../../src/ol/interaction/MouseWheelZoom.js';
import MouseWheelZoom from '../../../src/ol/interaction/MouseWheelZoom.js';
import _ol_interaction_PinchZoom_ from '../../../src/ol/interaction/PinchZoom.js';
import TileLayer from '../../../src/ol/layer/Tile.js';
import _ol_layer_Vector_ from '../../../src/ol/layer/Vector.js';
@@ -482,7 +482,7 @@ describe('ol.Map', function() {
options.mouseWheelZoom = true;
var interactions = defaultInteractions(options);
expect(interactions.getLength()).to.eql(1);
expect(interactions.item(0)).to.be.a(_ol_interaction_MouseWheelZoom_);
expect(interactions.item(0)).to.be.a(MouseWheelZoom);
expect(interactions.item(0).constrainResolution_).to.eql(false);
expect(interactions.item(0).useAnchor_).to.eql(true);
interactions.item(0).setMouseAnchor(false);
@@ -509,7 +509,7 @@ describe('ol.Map', function() {
expect(interactions.getLength()).to.eql(2);
expect(interactions.item(0)).to.be.a(_ol_interaction_PinchZoom_);
expect(interactions.item(0).constrainResolution_).to.eql(true);
expect(interactions.item(1)).to.be.a(_ol_interaction_MouseWheelZoom_);
expect(interactions.item(1)).to.be.a(MouseWheelZoom);
expect(interactions.item(1).constrainResolution_).to.eql(true);
});
});