Skip to content

EventManager 事件管理

EventManager 类用于统一管理地图事件,提供简单的 API 来监听、移除和触发地图事件。它对 OpenLayers 的原生事件系统进行了封装,提供了类型安全的事件处理。

导入

typescript
import { EventManager, MapEventData } from 'my-openlayer';

接口定义

MapEventData 接口

统一的事件数据结构,回调函数会接收此类型的参数。

属性名类型描述
typeMapEventType事件类型
originalEventEvent原始 DOM 事件对象 (可选)
coordinatenumber[]发生事件的地理坐标 (可选)
pixelPixel发生事件的屏幕像素坐标 (可选)
featuresFeatureLike[]事件位置处的要素列表 (可选)
featureFeatureLike事件位置处的第一个要素 (可选)
zoomnumber当前地图缩放级别 (可选)
[key: string]any其他自定义属性

MapEventType 类型

支持的事件类型字符串: 'click' | 'dblclick' | 'hover' | 'moveend' | 'zoomend' | 'pointermove' | 'rendercomplete' | 'error'

构造函数

typescript
constructor(map: Map)
参数名类型描述
mapMapOpenLayers 地图实例

方法

监听事件

typescript
on(type: MapEventType, callback: EventCallback, options?: { once?: boolean; filter?: (event: MapEventData) => boolean; }): string

注册事件监听器。

参数名类型描述
typeMapEventType事件类型
callbackEventCallback事件回调函数
optionsobject监听选项 (可选)
options.onceboolean是否只触发一次
options.filterfunction事件过滤器,返回 false 则不触发回调

返回值: string - 监听器 ID,用于取消监听。

移除监听

typescript
off(id: string): boolean

根据监听器 ID 移除事件监听。

参数名类型描述
idstring监听器 ID

返回值: boolean - 是否成功移除。

移除所有监听

typescript
clear(): void

移除所有已注册的事件监听器。

使用示例

基础事件监听

typescript
import { MyOl } from 'my-openlayer';

const myOl = new MyOl('map-container');
const eventManager = myOl.getEventManager();

// 监听点击事件
const clickId = eventManager.on('click', (event) => {
  console.log('Clicked at:', event.coordinate);
  
  if (event.feature) {
    console.log('Clicked feature:', event.feature);
  }
});

// 监听缩放结束
eventManager.on('zoomend', (event) => {
  console.log('Current zoom:', event.zoom);
});

一次性监听

typescript
// 只监听一次点击
eventManager.on('click', (event) => {
  console.log('First click only');
}, { once: true });

带过滤条件的监听

typescript
// 只监听包含特定属性要素的点击
eventManager.on('click', (event) => {
  console.log('Clicked special feature');
}, {
  filter: (event) => {
    if (!event.feature) return false;
    const props = event.feature.getProperties();
    return props.type === 'special';
  }
});

移除监听

typescript
// 停止监听
eventManager.off(clickId);

// 或清除所有
eventManager.clear();

Released under the MIT License.