appear-polyfill
Version:
[](https://www.npmjs.com/package/rax-appear)
47 lines (45 loc) • 1.78 kB
JavaScript
;
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);
}