UNPKG

thsc-datav-standard-chart

Version:

标准范式组件

85 lines (84 loc) 3.31 kB
import EventEmitter, { type Query, type Option } from './EventEmitter'; /** * 自定义事件 * * ! 为了与 echarts 事件做区分,类型命名以 dv: 前缀,且与 echarts 保持一致全部小写 */ type CustomEventDefinition = { 'dv:click': (event: unknown) => void; 'dv:beforeinit': () => void; 'dv:afterinit': () => void; 'dv:beforeupdate': () => void; 'dv:afterupdate': () => void; 'dv:beforedestroy': () => void; 'dv:destroy': () => void; 'dv:afterdestroy': () => void; 'dv:play': () => void; /** * 可用来监听 axisPointer 的坐标更新 * * * 与直接使用 `echartsIns.on('updateAxisPointer')` 的区别是在有 `dataZoom.inside` 存在时,如果触发 dataZoom 的交互则不会触发该事件 * * 调用 `echartsIns.dispatchAction({ type: 'updateAxisPointer' })` 时也会触发 */ 'dv:updateAxisPointer': (...args: unknown[]) => void; }; type EventDefinition = CustomEventDefinition; /** * 事件处理 */ export default class EventHandler extends EventEmitter<EventDefinition> { /** 在 echarts 未实例化之前用户传入的绑定事件 */ private __pendingToRegisterEChartsInsEvents; /** `dataZoom.inside` 组件正在交互中 */ private __DATA_ZOOM_INSIDE_INTERACTING; /** * 注册事件 * * @example * ```js * on(eventType, handler, option? | context) * on(eventType, query, handler, option? | context) * ``` */ on<K extends keyof EventDefinition, ARG1 extends EventDefinition[K] | Query<EventDefinition[K]>, ARG2 = ARG1 extends EventDefinition[K] ? Option : EventDefinition[K], ARG3 = ARG2 extends Option ? never : Option>(eventType: K, arg1: ARG1, arg2?: ARG2, arg3?: ARG3): void; /** * 注册事件(仅触发一次) * * @example * ```js * once(eventType, handler, option? | context) * once(eventType, query, handler, option? | context) * ``` */ once<K extends keyof EventDefinition, ARG1 extends EventDefinition[K] | Query<EventDefinition[K]>, ARG2 = ARG1 extends EventDefinition[K] ? Option : EventDefinition[K], ARG3 = ARG2 extends Option ? never : Option>(eventType: K, arg1: ARG1, arg2?: ARG2, arg3?: ARG3): void; off<K extends keyof EventDefinition>(eventType: K, handler?: EventDefinition[K]): void; emit<K extends keyof EventDefinition>(eventType: K, ...args: Parameters<EventDefinition[K]>): void; /** * 事件绑定 * * ! 由子类完成初始化后调用 */ protected _bindEvents(): void; private __handleInteraction; /** * * 处理图表和页面的滚动交互冲突 / dataZoom 与 tooltip 交互冲突 问题 */ private __handlePageScroll; /** * * 处理 tooltip、axisPointer 的显示隐藏逻辑 * * - 移动端交互,手指离开屏幕时 Tooltip 和 AxisPointer 组件开始自动消失 */ private __handleTooltip; /** * 刷新等待注册到 echarts 实例的事件 * * ! 由子类完成 echarts 初始化后调用 */ protected _flushPendingToRegisterEChartsInsEvents(): void; /** * 分发事件 */ dispatchEvent<E extends keyof EventDefinition>(eventType: E, ...args: Parameters<EventDefinition[E]>): void; } export {};