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 🙏

© 2026 – Pkg Stats / Ryan Hefner

vagajs

v0.2.0

Published

A simple and straightforward animation library to enable CSS based animations on scroll, as soon as the elements become visible by the user.

Downloads

22

Readme

VagaJS

WIP~

A simple and straightforward animation library to enable CSS based animations on scroll, as soon as the elements become visible by the user.

https://lotrekagency.github.io/vagajs/


Table of contents

Getting started

Documentation

Built with and how does it work

Options and how to customize them

Browser support

Copyright and license

TODO


Getting started

Install VagaJS via a packet manager, such as npm:

npm install vagajs

Then import it in your javascript build:

import * as vaga from "vagajs/build/vaga.min.js";

and the CSS aswell:

import "vagajs/build/vaga.min.css"; //or add it in your CSS workflow

Now to run it simply start VagaJS somewhere in your javascript build:

vaga.start();

VagaJS has a set of default options to make it work right off the bat, however you can customize the options easily, more info in the documentation section.


Documentation

VagaJS can work by simply adding its CSS classes on HTML elements once you've installed, imported it in your web project and started it.

Let's say you want to play a fade in animation on an element, here's how it works:

<div class="vaga-fade-in" style="background:lime;">Hello there!</div>

Here's how the VagaJS CSS classes work:

.vaga-<property>-<direction>

property: there are currently 3 properties, which are fade, move and opacity.

direction: there are 4 directions, which are in, out, left and right. (The opacity property has no directions!)


Animation classes

fade-in: .vaga-fade-in

fade-out: .vaga-fade-out

fade-left: .vaga-fade-left

fade-right: .vaga-fade-right

move-in: .vaga-move-in

move-out: .vaga-move-out

move-left: .vaga-move-left

move-right: .vaga-move-right

opacity: .vaga-opacity


Custom length/size

Both fade and fade animations have a default transform length of 40px (20px on mobile), to customize this option you need to add a dataset, with vsize as the datataset property and an integer number as the value.

example: <div class="vaga-move-right" data-vsize="60"></div>


Responsive util classes

However you may want to have different animations on different viewports: that's why there are responsive utils in VagaJS.

Want to have a fade-in on an element when it's viewed in a mobile device and then replacing that animation with a fade-left when viewed on bigger viewports?

<div class="vaga-fade-in vaga-fade-left--md" style="background:lime;">Fade-in on mobile, fade-left on tablet and desktop</div>

These responsive util classes are mobile-first and work as follow:

.vaga-<property>-<direction>--<breakpoint>

Breakpoints are md (min-width: 992px) and lg (min-width: 1400px), here's another example:

.vaga-move-right--lg


Unload util

To unload animations after the element is no longer visible.

.vaga-unload


Delay util classes

Sometimes you want to have a bit of delay between animations, and for this issue VagaJS comes with a delay util:

.vaga-delay-<value>

This util will apply a delay based on its value, where the values are 1, 2, 3 and 4.

.vaga-delay-0-5 - will apply a delay of duration * 0.5. duration is an option, and its default is 0.375s, so this util will apply a delay of half of that value.

.vaga-delay-1 - will apply a delay of duration * 1 (which would be 0.375s).

.vaga-delay-1-5 - will apply a delay of duration * 1.5 (which would be 0.375s * 1.5).

.vaga-delay-2 - will apply a delay of duration * 2 (which would be 0.375s * 2).

And so on, up to .vaga-delay-6, which is duration * 6.


Various util classes

.vaga-will - applies will-change: transform; for smoother animations, MDN reference.

.vaga-block - trick to have smooth animations and transitions only when the window is loaded, add this to the parent/grandparent element such as the body.


Built with and how does it work

This library is built on Intersection Observer API, which detects when an element is being viewed by the user.

By adding the VagaJS classes to your HTML elements, you assign an observer to them, detecting when they are visible, enabling and kicking off the animations.


Options and how to customize them

VagaJS has a set of default options, which are the following:

root - default value is null, this is an IntersectionObserver's parameter.

rootMargin - default value is 0px, this is an IntersectionObserver's parameter.

threshold - default value is 0.25, this is an IntersectionObserver's parameter.

targets - default value is document.querySelectorAll("[class*='vaga-'"), this is an IntersectionObserver's parameter.

duration - default is 0.375s, CSS transition-duration.

timingFunction - default is ease-in, CSS transition-timing-function (can accept cubic-bezier() functions).

To customize these options, simply do like this:

var options = { threshold: 0.15, duration: 0.75, timingFunction: "linear" }

vaga.start(options)


Browser support

VagaJS works on the latest versions of Chrome, Firefox, Edge and Safari.


Copyright and license

lotrekagency/vagajs is licensed under the MIT License.


TODO

Check the repo's issues tab