52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'
|
|
import ol_interaction_Interaction from 'ol/interaction/Interaction.js'
|
|
import ol_ext_element from '../util/element.js'
|
|
|
|
/** An interaction to focus on the map on click. Usefull when using keyboard event on the map.
|
|
* @deprecated use ol/interaction/CurrentMap instead
|
|
* @constructor
|
|
* @fires focus
|
|
* @extends {ol_interaction_Interaction}
|
|
*/
|
|
var ol_interaction_FocusMap = class olinteractionFocusMap extends ol_interaction_Interaction {
|
|
constructor() {
|
|
//
|
|
super({});
|
|
|
|
// Focus (hidden) button to focus on the map when click on it
|
|
this.focusBt = ol_ext_element.create('BUTTON', {
|
|
on: {
|
|
focus: function () {
|
|
this.dispatchEvent({ type: 'focus' });
|
|
}.bind(this)
|
|
},
|
|
style: {
|
|
position: 'absolute',
|
|
zIndex: -1,
|
|
top: 0,
|
|
opacity: 0
|
|
}
|
|
});
|
|
}
|
|
/** Set the map > add the focus button and focus on the map when pointerdown to enable keyboard events.
|
|
*/
|
|
setMap(map) {
|
|
if (this._listener) ol_Observable_unByKey(this._listener);
|
|
this._listener = null;
|
|
if (this.getMap()) { this.getMap().getViewport().removeChild(this.focusBt); }
|
|
|
|
super.setMap(map);
|
|
|
|
if (this.getMap()) {
|
|
// Force focus on the clicked map
|
|
this._listener = this.getMap().on('pointerdown', function () {
|
|
if (this.getActive())
|
|
this.focusBt.focus();
|
|
}.bind(this));
|
|
this.getMap().getViewport().appendChild(this.focusBt);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default ol_interaction_FocusMap
|