UNPKG

appear-polyfill

Version:

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

47 lines (45 loc) 1.78 kB
"use strict"; exports.__esModule = true; exports.setupAppear = setupAppear; exports.setupPreAppear = setupPreAppear; var _intersectionObserverManager = require("./intersectionObserverManager"); /** * Simulate appear & disappear events. */ // hijack Node.prototype.addEventListener var injectEventListenerHook = function (events, Node, observerElement) { if (events === void 0) { events = []; } var nativeAddEventListener = Node.prototype.addEventListener; Node.prototype.addEventListener = function (eventName, eventHandler, useCapture) { var lowerCaseEventName = eventName && String(eventName).toLowerCase(); var isAppearEvent = events.some(function (item) { return item === lowerCaseEventName; }); if (isAppearEvent) observerElement(this); nativeAddEventListener.call(this, eventName, eventHandler, useCapture); }; return function () { Node.prototype.addEventListener = nativeAddEventListener; (0, _intersectionObserverManager.destroyAllIntersectionObserver)(); }; }; function setupPreAppear(win, options) { var observerElement = (0, _intersectionObserverManager.createIntersectionObserver)(_intersectionObserverManager.IntersectionObserverMode.PRE_APPEAR, options); injectEventListenerHook(['preappear'], win.Node, observerElement); } function setupAppear(win, options) { if (!win) { if (typeof window !== 'undefined') { win = window; } else { return; } } if (options != null && options.preAppear) { setupPreAppear(win, options); } var observerElement = (0, _intersectionObserverManager.createIntersectionObserver)(_intersectionObserverManager.IntersectionObserverMode.DEFAULT, options); return injectEventListenerHook(['appear', 'disappear'], win.Node, observerElement); }