SourceTermAnalysisSystem_vue/node_modules/ol-ext/interaction/FocusMap.js
2026-05-15 10:22:44 +08:00

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