intersection-observer-admin
Why use an administrator to manage all the elements on my page?
This library is used in ember-in-viewport and ember-infinity. This library is particularly important for re-using the IntersectionObserver API.
Most implementations have one Intersection Observer for each target element or so called sentinel
. However, IntersectionObserver.observe can observer multiple sentinels
. So this library will resuse the IntersectionObserver instance for another element on the page with the same set of observer options and root element. This can dramatically improve performance for pages with lots of elements and observers.
Installation
npm install intersection-observer-admin --save
Usage
API
- element: DOM Node to observe
- enterCallback: Function
- callback function to perform logic in your own application
- exitCallback: Function
- callback function to perform when element is leaving the viewport
- observerOptions: Object
import IntersectionObserverAdmin from 'intersection-observer-admin';
const intersectionObserverAdmin = new IntersectionObserverAdmin();
intersectionObserverAdmin.addEnterCallback(element, enterCallback);
intersectionObserverAdmin.addExitCallback(element, exitCallback);
intersectionObserverAdmin.observe(element, { root, rootMargin: '0px 0px 100px 0px', threshold: 0 });
intersectionObserverAdmin.observe(element, { root, rootMargin: '0px 0px 100px 0px', threshold: 0, scrollableArea: '.my-list' });
intersectionObserverAdmin.unobserve(element, observerOptions);
intersectionObserverAdmin.destroy();
Out of the box
Chrome | 51 [1] |
Firefox (Gecko) | 55 [2] |
MS Edge | 15 |
Internet Explorer | Not supported |
Opera [1] | 38 |
Safari | Safari Technology Preview |
Chrome for Android | 59 |
Android Browser | 56 |
Opera Mobile | 37 |
- [1] Reportedly available, it didn't trigger the events on initial load and lacks
isIntersecting
until later versions. - [2] This feature was implemented in Gecko 53.0 (Firefox 53.0 / Thunderbird 53.0 / SeaMonkey 2.50) behind the preference
dom.IntersectionObserver.enabled
.