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 🙏

© 2025 – Pkg Stats / Ryan Hefner

effectbox

v0.2.2

Published

A collection of ready-to-use & lean frontend effects & tools

Downloads

20

Readme

EffectBox - A collection of ready-to-use & lean frontend effects & tools

Problem

There are a lot of frontend Javascript effects out there - like number counters, video popups, and more. Each of those frontend effects have their own usage, their own set of required html structures, initializer functions, start, end, destroy functions. When you're building multiple websites, implementing multiple effects can take a long time since you'll have to conform to each library's conventions. Some effects / libraries have a ton of options or customizations, sometimes we only need things to be lean.

Goal

The goal is to have a collection of ready-to-use Javascript frontend effects and frontend utilities and provide a lean and simple way to use them.

The goal is NOT to create effects from scratch, but to bring in the ones that would work well and won't leave a huge footprint.

Principles

Each effect and utility will try and adhere to these principles:

  1. Just Works - should work the way you think it would. For example, an entrace-type effect should start when the element comes into the viewport.
  2. Simplicity - we can only have 2 functions - a start() and stop() function.
  3. Standardized - use each effect almost the same way.

You can import each effect/utility individually as you need them in your project, or include the whole EffectBox script.

What's Inside?

Effects

Utilities

  • [x] Scroll Reveal - Trigger a callback when an element becomes visible

Create an issue or PR and suggest frontend effects & utilities!

Installation via NPM

Each effect / utility is an ES6 module that can be imported into your project so you can use them only when needed.

Install via npm

npm install effectbox

And then import when needed:

import { countUp } from 'effectbox'
import { scrollReveal } from 'effectbox'

Note that some effects will need some essential styles. For those, refer to the index.scss file in the src folder of the effect, or use the effectbox.css in the dist folder.

Installation via <script> tag

Or you can include the whole pre-built library via <script>:

<script src="//path/to/effectbox.min.js" type="text/javascript"></script>

This exposes the global/window variable effectBox that contains all the effects and libraries - for example effectBox.countUp

Also include the css:

<link rel="stylesheet" media="all" href="//path/to/effectbox.min.css"/>

Via Style tag is not so advisable.

Usage

Each effect usually needs a minimal HTML structure, a set of options and Javascript to start() the effect up.

To make the documentation short(er), I'll explain how to use one effect - the Count Up effect in detail now. This will be very similar to how other effects can be used, so you should be able to use the other effects without any hitch. The rest of the documentation afterwards can be for options and descriptions.

Step 1: Set up the HTML Structure

For the Count Up effect, this is the minimal HTML. I'll add a class so I can find it later:

<div class="my-count-up">123</div>

Step 2: Start it Up

Each effect has a start() and stop() function. It's required to call the start() function when your DOM is ready.

import { countUp } from 'effectbox'

// When DOM is ready...
const el = document.querySelector( '.my-count-up' )
countUp.start( el )

You should be able to stop() the function after calling start(). And you should be able to start() it again afterwards.

It should now work fine, but we can customize it a little bit with options.

Step 3: Options

Options can either be passed via Javascript during the start() function or via data-* attributes in the main HTML structure.

The Count Up effect has a duration option to change the speed of the animation. This can be set with Javascript via:

countUp.start( el, {
    duration: 2000,
} )

Or it can be set via the HTML structure:

<div data-duration="2000">123</div>

Documentation

countUp

Animates a number to have a count-up effect when it scrolls into the viewport.

Minimal HTML

<div>9,876</div>

The text in the middle can be a string containing more than one number and can contain non-numeric characters. Only the numeric characters will count-up.

Options

| Option | Type | Default | Description | | - | - | - | - | | duration | number | 1000 | The duration of the count effect | | delay | number | 16 | The delay of each count tick | | lang | string | en | The locale to use for number formatting. Use other locale strings e.g. fr-FR to use localized decimal and thousand symbols |

Example

HTML

<div>$99.99/yr</div>

JS

countUp.start( el )

videoPopup

Creates a video thumbnail that when clicked opens a fullscreen-like video inside a lightbox. Supports Vimeo, YouTube or MP4 videos and supports image or video thumbnails.

This requires some essential styles.

Minimal HTML

<div class="eb-video-popup"
    data-video='http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'
    >
    <div class="eb-video-preview" style="background-image: url('https://source.unsplash.com/random/800x600');"></div>
    <div class="eb-video-wrapper">
        <a href="#"></a>
        <span class="eb-play-button">
            <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 256 320"><path d="M0 0v320l256-160L0 0z"/></svg>
        </span>
    </div>
</div>

Options

| Option | Type | Default | Description | | - | - | - | - | | video | string | | The YouTube video ID, Vimeo video ID or MP4 video URL |

Example

Video thumbnail

HTML

<div class="eb-video-popup"
    data-video='mnSgHLBpOpw'
    >
    <video class="eb-video-preview" autoPlay loop muted>
        <source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4">
    </video>
    <div class="eb-video-wrapper">
        <a href="#"></a>
        <span class="eb-play-button">
            <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 34 34"><path d="M17 34C7.6 34 0 26.4 0 17S7.6 0 17 0s17 7.6 17 17-7.6 17-17 17zm0-32C8.7 2 2 8.7 2 17s6.7 15 15 15 15-6.7 15-15S25.3 2 17 2z"/><path d="M12 25.7V8.3L27 17l-15 8.7zm2-14v10.5l9-5.3-9-5.2z"/></svg>
        </span>
    </div>
</div>

JS

videoPopup.start( el )

scrollReveal

Triggers a callback function once when the element scrolls into the viewport. It gets triggered when the element is already in view at the start.

Options

| Option | Type | Default | Description | | - | - | - | - | | callback | function | | The function called when the element comes into the viewport |

Example

JS

const callback = () => {
    console.log( 'Now in view!' )
}
scrollReveal.start( el, {
    callback: callback,
} )