UNPKG

appear-polyfill

Version:

[![npm](https://img.shields.io/npm/v/rax-appear.svg)](https://www.npmjs.com/package/rax-appear)

36 lines (29 loc) 1.1 kB
/** * Simulate appear & disappear events. */ import { createIntersectionObserver, destroyIntersectionObserver, observerElement } from './intersectionObserverManager'; // hijack Node.prototype.addEventListener const injectEventListenerHook = (instances = [], Node) => { let nativeAddEventListener = Node.prototype.addEventListener; Node.prototype.addEventListener = function(eventName, eventHandler, useCapture, doNotWatch) { const lowerCaseEventName = eventName && String(eventName).toLowerCase(); const isAppearEvent = lowerCaseEventName === 'appear' || lowerCaseEventName === 'disappear'; if (isAppearEvent) observerElement(this); nativeAddEventListener.call(this, eventName, eventHandler, useCapture); }; return function unsetup() { Node.prototype.addEventListener = nativeAddEventListener; destroyIntersectionObserver(); }; }; export function setupAppear(win) { if (!win) { if (typeof window !== 'undefined') { win = window; } else { return; } } createIntersectionObserver(); return injectEventListenerHook([], win.Node); }