UNPKG

tg-map-vue3

Version:

封装 百度地图, Google地图, Here地图(未完成) 的Vue3组件库

72 lines (71 loc) 3.95 kB
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; }