Add a keyboardEventTarget option to the map

This option allows specifying the element to listen to keyboard events on.
This commit is contained in:
Éric Lemoine
2013-10-18 15:56:53 +02:00
parent 016efd22d1
commit cf5aada8cf
2 changed files with 23 additions and 4 deletions

View File

@@ -30,6 +30,12 @@
* then it gets set by using `window.devicePixelRatio`.
* @property {ol.Collection|Array.<ol.interaction.Interaction>|undefined} interactions
* Interactions that are initially added to the map.
* @property {Element|Document|undefined} keyboardEventTarget The element to listen to keyboard events on.
* This determines when the `KeyboardPan` and `KeyboardZoom` interactions trigger. For example, if
* this option is set to `document` the keyboard interactions will always trigger. If this option
* is not specified, the element the library listens to keyboard events on is the map target (i.e.
* the user-provided div for the map). In that case the target element needs to be focused for key
* events to be emitted, requiring that the target element has a `tabindex` attribute.
* @property {Array.<ol.layer.Base>|ol.Collection|undefined} layers Layers.
* @property {boolean|undefined} ol3Logo Show ol3 logo. Default is `true`.
* @property {ol.Collection|Array.<ol.Overlay>|undefined} overlays

View File

@@ -284,6 +284,12 @@ ol.Map = function(options) {
this.handleMapBrowserEvent, false, this);
this.registerDisposable(mapBrowserEventHandler);
/**
* @private
* @type {Element|Document}
*/
this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;
/**
* @private
* @type {goog.events.KeyHandler}
@@ -876,10 +882,9 @@ ol.Map.prototype.handleTargetChanged_ = function() {
} else {
goog.dom.appendChild(targetElement, this.viewport_);
// The key handler is attached to the user-provided target. So the key
// handler will only trigger events when the target element is focused
// (requiring that the target element has a tabindex attribute).
this.keyHandler_.attach(targetElement);
var keyboardEventTarget = goog.isNull(this.keyboardEventTarget_) ?
targetElement : this.keyboardEventTarget_;
this.keyHandler_.attach(keyboardEventTarget);
}
this.updateSize();
@@ -1312,6 +1317,7 @@ ol.Map.prototype.withFrozenRendering = function(f, opt_this) {
/**
* @typedef {{controls: ol.Collection,
* interactions: ol.Collection,
* keyboardEventTarget: (Element|Document),
* ol3Logo: boolean,
* overlays: ol.Collection,
* rendererConstructor:
@@ -1327,6 +1333,12 @@ ol.MapOptionsInternal;
*/
ol.Map.createOptionsInternal = function(options) {
/**
* @type {Element|Document}
*/
var keyboardEventTarget = goog.isDef(options.keyboardEventTarget) ?
options.keyboardEventTarget : null;
/**
* @type {Object.<string, *>}
*/
@@ -1421,6 +1433,7 @@ ol.Map.createOptionsInternal = function(options) {
return {
controls: controls,
interactions: interactions,
keyboardEventTarget: keyboardEventTarget,
ol3Logo: ol3Logo,
overlays: overlays,
rendererConstructor: rendererConstructor,