iobserve
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

IObserve is a lightweight script that allows you to easily use browsers' IntersectionObserver API

iobserve (latest) iobserve (downloads)


Love this project? 😍 Buy me a coffee!


Getting started

In order to use IObserve, you shall markup your observed elements like this

<div class="iobserve">...</div>

Then, in your javascript code:

const onEnter: (el) => {
  console.log(el, "entered the viewport");
  // do something with it
}

const iobserveInstance = new IObserve({
  // Your custom settings go here
  onEnter: onEnter
});

Usage - with npm

npm install iobserve

Usage - from a CDN

The easiest way to use IObserve is to include the script from a CDN:

<script src="https://cdn.jsdelivr.net/npm/iobserve@0.0.1/dist/iobserve.min.js"></script>

Then, in your javascript code:

const onEnter: (el) => {
  console.log(el, "entered the viewport");
  // do something with it
}

const iobserveInstance = new IObserve({
  // Your custom settings go here
  onEnter: onEnter
});

To be sure that DOM for your lazy content is ready when you instantiate IObserve, place the script tag right before the closing </body> tag. If more DOM arrives later, e.g. via an AJAX call, you'll need to call iobserveInstance.update(); to make IObserve check the DOM again.

iobserveInstance.update();

Using an async script

If you prefer, it's possible to include IObserve's script using async script and initialize it as soon as it's loaded.

To do so, you must define the options before including the script. You can pass:

  • {} an object to get a single instance of IObserve
  • [{}, {}] an array of objects to get multiple instances of IObserve, each one with different options.
<script>
  // Set the options globally
  // to make IObserve self-initialize
  window.iobserveOptions = {
    // Your custom settings go here
  };
</script>

Then include the script.

<script async src="https://cdn.jsdelivr.net/npm/iobserve@0.0.1/dist/iobserve.min.js"></script>

Possibly place the script tag right before the closing </body> tag. If you can't do that, IObserve could be executed before the browser has loaded all the DOM, and you'll need to call its update() method to make it check the DOM again.

Using an async script + getting the instance reference

Same as above, but you must put the addEventListener code shown below before including the async script.

<script>
  // Set the options globally
  // to make IObserve self-initialize
  window.iobserveOptions = {
    // Your custom settings go here
  };
  // Listen to the initialization event
  // and get the instance of IObserve
  window.addEventListener(
    "IObserve::Initialized",
    function (event) {
      window.iobserveInstance = event.detail.instance;
    },
    false
  );
</script>

Then include the script.

<script async src="https://cdn.jsdelivr.net/npm/iobserve@0.0.1/dist/iobserve.min.js"></script>

Now you'll be able to call its methods, like:

iobserveInstance.update();

Bundles

You can find and use different bundles.

Filename Module Type Advantages
iobserve.min.js UMD (Universal Module Definition) Works pretty much everywhere, even in common-js contexts
iobserve.iife.min.js IIFE (Immediately Invoked Function Expression) Works as in-page <script src="...">, ~0.5kb smaller than UMD version
iobserve.amd.min.js AMD (Asynchronous Module Definition) Works with RequireJS module loader, ~0.5kb smaller than UMD version
iobserve.esm.js ES Module Exports IObserve so you can import it in your project both using <script type="module" src="..."> and a bundler like WebPack or Rollup

Love this project? 😍 Buy me a coffee!


🔌 API

Constructor arguments

The new IObserve() instruction you execute on your page can take two parameters:

Parameter What to pass Required Default value Type
Options The option object for this instance of IObserve No {} Plain Object

The most common usage of IObserve constructor is to pass only the options object (see "options" in the next section). For example:

var aIObserve = new IObserve({
  /* options here */
});

Options

For every instance of IObserve you can pass in some options, to alter its default behaviour. Here's the list of the options.

Name Meaning Default value Example value
elements The CSS selector of the elements to load lazily. ".iobserve" ".somethingElse"
threshold A number of pixels representing the outer distance off the scrolling area from which to start loading the elements. 0 500
thresholds Similar to threshold, but accepting multiple values and both px and % units. It maps directly to the rootMargin property of IntersectionObserver (read more), so it must be a string with a syntax similar to the CSS margin property. You can use it when you need to have different thresholds for the scrolling area. It overrides threshold when passed. null "500px 10%"
onEnter A callback function which is called whenever an element enters the viewport. Arguments: DOM element, intersection observer entry, iobserve instance. null (el)=>{console.log("Entered", el)}
onExit A callback function which is called whenever an element exits the viewport. Arguments: DOM element, intersection observer entry, iobserve instance. null (el)=>{console.log("Exited", el)}

Methods

Instance methods

You can call the following methods on any instance of IObserve.

Method name Effect Use case
update() Make IObserve to re-check the DOM for elements elements in the page. Update IObserve after you added or removed DOM elements to the page.
destroy() Destroys the instance, unsetting instance variables and removing listeners. Free up some memory. Especially useful for Single Page Applications.

Love this project? 😍 Buy me a coffee!


Tested on real browsers

Legacy browsers support is from IE 9 up. This script is tested in every browser before every release using BrowserStack live, thanks to the BrowserStack Open Source initiative.

BrowserStack Logo

Package Sidebar

Install

npm i iobserve

Weekly Downloads

0

Version

0.0.1

License

MIT

Unpacked Size

150 kB

Total Files

11

Last publish

Collaborators

  • verlok