UNPKG

@ryusei/code

Version:

<div align="center"> <a href="https://code.ryuseijs.com"> <img alt="RyuseiCode" src="https://code.ryuseijs.com/images/svg/logo.svg" width="70"> </a>

70 lines (58 loc) 1.77 kB
import { isFunction } from '../../type/type'; import { handlerMap } from '../on/on'; export function off<K extends keyof WindowEventMap>( elm: Window, events: K, callbackOrKey: object | ( ( e: Event ) => void ) ): void; export function off<K extends keyof DocumentEventMap>( elm: Document, events: K, callbackOrKey: object | ( ( e: Event ) => void ) ): void; export function off<K extends keyof HTMLElementEventMap>( elm: HTMLElement, events: K, callbackOrKey: object | ( ( e: Event ) => void ) ): void; export function off<K extends keyof SVGElementEventMap>( elm: SVGElement, events: K, callbackOrKey: object | ( ( e: Event ) => void ) ): void; export function off<K extends keyof ElementEventMap>( elm: Element, events: K, callbackOrKey: object | ( ( e: Event ) => void ) ): void; export function off<T extends Event = Event>( elm: Window | Document | Element, events: string, callbackOrKey: object | ( ( e: T ) => void ) ): void; /** * Detaches a handler from the event or events. * * @param elm - An element where events are removed. * @param events - Optional. An event name or names. * @param callbackOrKey - Optional. A handler to remove or an object key. */ export function off( elm: Window | Document | Element, events: string, callbackOrKey: object | ( ( e: Event ) => void ) ): void { if ( isFunction( callbackOrKey ) ) { events.split( ' ' ).forEach( event => { elm.removeEventListener( event, callbackOrKey ); } ); } else { const handlers = handlerMap.get( callbackOrKey ); if ( handlers ) { handlers.forEach( handler => { off( handler.elm, handler.events, handler.callback ); } ); handlerMap.delete( callbackOrKey ); } } }