npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

scroll-interactions

v0.8.1

Published

Easy scroll-driven interactions in the browser built on top of IntersectionObserver

Downloads

8

Readme

scroll-interactions

Introduction

Easy scroll-driven interactions in the browser built on top of IntersectionObserver. Set a hidden trigger line in the browser viewport and see how one or more elements relate to it. This package tells you when an element is above, below or intersect the trigger line. If the element intersect the trigger it can also calculate the percent of completion relative to the element's top border.

Features

  • Zero dependencies, lightweight (4kb).
  • Get browser's scroll direction (downwards or upwards).
  • Get element position relative to the trigger line (above, intersect, below).
  • Get percent of completion relative to the target element's top border.
  • Unobserve target elements.
  • Change IntersectionObserver's root (defaults to browser viewport).
  • Access the original IntersectionObserver entry elements.
  • Disconnect IntersectionObserver.

Install

NPM

npm install --save scroll-interactions

CDN

<script src="https://unpkg.com/scroll-interactions/dist/scroll-interactions.iife.min.js"></script>

Quick start

<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
import scroll_interactions from "scroll-interactions";

const observe_box = scroll_interactions({
  targets: ".box",
  trigger: 0.5,
});

observe_box
  .init()
  .observe(({ direction, position }) => {
    // direction: scroll direction
    // position: element position relative to the trigger
  });

Examples

Try those examples and inspect their index.html source code for more info.

API

Go to API page.

How it works

The observe() method works as callback handler of IntersectionObserver, it fires one time on first page load, then it fires only when a target element enter or exit the trigger line.

If progress: true and a target element intersect the trigger line, a scroll event listener is added to keep track of progress, when the element leave the trigger line the event listener is removed.

When you use unobserve option, all targets that has been unobserved will be cached, if scroll-interactions is re-initialize it'll not observe them again (see docs/unobserve example), you can also empty the cache if needed (read API for reference).

Browsers support

It works with all browser that support IntersectionObserver. For older browser make sure to add the official IntersectionObserver polyfill before creating a scroll_interactions instance.

Notes

It works even if the browser is zoomed.

At the moment support only vertical scrolling.

Inspired by scrollama.