tg-map-vue3
Version:
封装 百度地图, Google地图, Here地图(未完成) 的Vue3组件库
72 lines (71 loc) • 3.95 kB
TypeScript
import type { AbstractMap, AbstractMapEventMap } from '../components';
import { type Tg } from './event';
import { type CoordTypeSupplier } from './lat-lng';
import type { UnionBaiduEventTarget, UnionGoogleEventTarget } from './unions';
/**
* 移除事件监听的函数
*
* 实现{@link EventTarget}有点复杂, 对于简单的情况, 实现一个设置监听的函数+返回{@link RemoveEventListenerFunction}就够了
* @see addBaiduEventListener
* @see addGoogleEventListener
* */
export interface RemoveEventListenerFunction {
(): void;
}
export declare function addGoogleEventListener(target: UnionGoogleEventTarget, type: string, listener: (...args: any[]) => void): RemoveEventListenerFunction;
export declare function addBaiduEventListener(target: UnionBaiduEventTarget, type: string, listener: (...args: any[]) => void): RemoveEventListenerFunction;
export declare function addHtmlEventListener<K extends keyof EventMap, EventMap = HTMLElementEventMap, T extends EventTarget = HTMLElement>(target: T, type: K, listener: (this: T, ev: EventMap[K]) => any, options?: AddEventListenerOptions | boolean): RemoveEventListenerFunction;
export declare function addTgEventListener<K extends keyof EventMap, EventMap = AbstractMapEventMap, T extends Tg.EventTarget = AbstractMap>(target: T, type: K, listener: (this: T, ev: EventMap[K]) => any): RemoveEventListenerFunction;
export interface EventTargetDelegate extends Tg.EventTarget {
setTarget(target: Tg.EventTarget): this;
}
/**
* ## Delegate(代理) VS Mixin(混合)
* Delegate相对于Mixin的优点是调用路径更明确, 缺点是js/ts原生不支持, 需要写样板代码
*/
export declare abstract class AbstractEventTargetDelegate<T = any> implements EventTargetDelegate {
protected inner: T;
protected coordTypeSupplier: CoordTypeSupplier;
protected eventMap: Map<string, any>;
protected target: Tg.EventTarget;
constructor(inner: T, coordTypeSupplier: CoordTypeSupplier);
setTarget(target: Tg.EventTarget): this;
abstract addEventListener(type: string, listener: Tg.EventListener): void;
abstract removeEventListener(type: string, listener: Tg.EventListener): void;
}
export declare class EventHubEventTargetDelegate<EventTypes extends string = string> implements EventTargetDelegate {
private delegate;
private options;
private eventHub;
constructor(delegate: EventTargetDelegate, options: {
/** 由{@link eventHub}手动处理的事件 */
types: EventTypes[];
/** 用户开始监听{@link type} */
onListen: (type: EventTypes) => void;
/** 用户结束监听{@link type} */
onCancel: (type: EventTypes) => void;
});
notify(event: Tg.Event): void;
hasListener(type: EventTypes): boolean;
setTarget(target: Tg.EventTarget): this;
addEventListener(type: string, listener: Tg.EventListener): void;
removeEventListener(type: string, listener: Tg.EventListener): void;
}
export declare class GoogleEventTargetDelegate<T extends UnionGoogleEventTarget = UnionGoogleEventTarget> extends AbstractEventTargetDelegate<T> {
private static EVENT_TYPE_MAP;
addEventListener(type: string, listener: Tg.EventListener): void;
removeEventListener(type: string, listener: Tg.EventListener): void;
}
export declare class BaiduEventTargetDelegate<T extends UnionBaiduEventTarget = UnionBaiduEventTarget> extends AbstractEventTargetDelegate<T> {
private static EVENT_TYPE_MAP;
addEventListener(type: string, listener: Tg.EventListener): void;
removeEventListener(type: string, listener: Tg.EventListener): void;
}
/** 手动维护事件 */
export declare class EventHub implements Tg.EventTarget {
private typeMap;
addEventListener(type: string, listener: Tg.EventListener): void;
removeEventListener(type: string, listener: Tg.EventListener): void;
hasListener(type: string): boolean;
notify(event: Tg.Event): void;
}