Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 1x 1x 2x 2x 14x 14x 14x 2x 2x 2x 2x 2x | import { AffixTargetType } from "./AffixProps"; interface AffixManager { target: AffixTargetType; changeHandlers: { [affixId: string]: (event: Event) => void; }; eventhandlers: { [event: string]: (event: Event) => void; }; } const Events = [ "resize", "scroll", "touchstart", "touchmove", "touchend", "pageshow", "load", ]; let managers: AffixManager[] = []; function createManager(target: AffixTargetType): AffixManager { const manager: AffixManager = { target, changeHandlers: {}, eventhandlers: {}, }; Events.forEach(type => { const listener = (event: Event) => Object.values(manager.changeHandlers).forEach( handler => handler && handler(event) ); target.addEventListener(type, listener); manager.eventhandlers[type] = listener; }); return manager; } export function addListener( target: AffixTargetType, affixId: string, onChange: (event: Event) => void ): void { const manager = managers.find(manager => manager.target === target) || createManager(target); manager.changeHandlers[affixId] = onChange; } export function removeListener(target: AffixTargetType, affixId: string) { const manager = managers.find(manager => manager.target === target); Iif (manager) { manager.changeHandlers[affixId] = undefined; if (Object.values(manager.changeHandlers).filter(i => !!i).length === 0) { Events.forEach(type => target.removeEventListener(type, manager.eventhandlers[type]) ); managers = managers.filter(manager => manager.target !== target); } } } |