thsc-datav-standard-chart
Version:
标准范式组件
85 lines (84 loc) • 3.31 kB
TypeScript
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 {};