Improve dispoable listener functions

This commit is contained in:
Daniel Imms
2018-01-14 13:18:00 -08:00
parent 70489e5035
commit 85c02f10bf
4 changed files with 65 additions and 27 deletions
+26
View File
@@ -0,0 +1,26 @@
import { IDisposable } from "../Interfaces";
/**
* Adds a disposabe listener to a node in the DOM, returning the disposable.
* @param type The event type.
* @param handler The handler for the listener.
*/
export function addDisposableListener(
node: Element | Window | Document,
type: string,
handler: (e: any) => void,
useCapture?: boolean
): IDisposable {
node.addEventListener(type, handler, useCapture);
return {
dispose: () => {
if (!handler) {
// Already disposed
return;
}
node.removeEventListener(type, handler, useCapture);
node = null;
handler = null;
}
};
}