tav-media
Version:
Cross platform media editing framework
34 lines (33 loc) • 1.01 kB
JavaScript
export class EventManager {
constructor() {
this.listenersMap = {};
}
on(eventName, listener) {
if (this.listenersMap[eventName] === undefined) {
this.listenersMap[eventName] = [];
}
this.listenersMap[eventName].push(listener);
return;
}
off(eventName, listener) {
const listenerList = this.listenersMap[eventName];
if (listenerList === undefined)
return;
if (listener === undefined) {
delete this.listenersMap[eventName];
return;
}
const index = listenerList.findIndex((fn) => fn === listener);
listenerList.splice(index, 1);
return;
}
emit(eventName, ...payload) {
const listenerList = this.listenersMap[eventName];
if (listenerList === undefined || listenerList.length < 1)
return false;
for (const listener of listenerList) {
listener(...payload);
}
return true;
}
}