mustard-app
Version:
个人前端微应用建设中。。。
44 lines (39 loc) • 1.58 kB
text/typescript
export type IEventLisParameters = Parameters<typeof addEventListener>;
export type IEventLisReturn = ReturnType<typeof addEventListener>;
type IType = IEventLisParameters[0];
type Ilistener = IEventLisParameters[1];
type Ioptions = IEventLisParameters[2];
export class ProxyEventListener {
eventLis = new Map<IType, Map<Ilistener, Ioptions>>();
// 添加事件
addEventListener (type: IType, listener: Ilistener, options: Ioptions) {
if(!this.eventLis.has(type)) {
this.eventLis.set(type, new Map());
}
const listeners = this.eventLis.get(type);
listeners?.set(listener, options);
return window.addEventListener(type, listener, options);
}
// 删除事件
removeEventListener (type: IType, listener: Ilistener, options: Ioptions) {
if(!this.eventLis.has(type)) {
this.eventLis.set(type, new Map());
}
const listeners = this.eventLis.get(type);
if(listeners?.get(listener) === options) {
listeners?.delete(listener);
}
return window.removeEventListener(type, listener, options);
}
// 全部清除事件
clear () {
Array.from(this.eventLis.keys()).forEach(key => {
const listeners = this.eventLis.get(key);
if(listeners instanceof Map) {
Array.from(listeners.keys()).forEach(listener => {
window.removeEventListener(key, listener, listeners.get(listener));
});
}
});
}
}