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

carallax

v0.1.3

Published

A class to create a layered parallax utilising html canvas

Downloads

75

Readme

Carallax

This class will create a canvas element to draw a layered parallax effect.

Demo

View on Codepen

Installation

npm i carallax

Usage

HTML

<section class="banner">
    <svg> ... </svg>
    <svg> ... </svg>
    <svg> ... </svg>
    <svg> ... </svg>
</section>

JavaScript

import CarallaxController from 'carallax';

const banner = document.querySelector('.banner');

const Carallax = new CarallaxController({
    depth: 50,
    alignment: 'bottom',
});

Put the canvas into the document

banner.appendChild(Carallax.canvas.element);

We can either load SVGs from the DOM

Carallax.add(banner.querySelectorAll('svg'));

Or we can load images from a URL

Carallax.add('https://example.com/image.png');

The front most layer is always static and will not move on scroll. The static layer needs to be added manually.

banner.appendChild(Carallax.static);

Options

| Option | Type | Description | Default | |--------|------|-------------|---------| | depth | number | The depth of the parallax effect. | 50 | | alignment | string | The alignment of the parallax effect. Can be top, center or bottom. | center | | throttle | number | The resize calculations throttle time in milliseconds. | 100 | | dpr | number | The device pixed ratio | window.devicePixelRatio | | precision | number | The precision of the parallax effect. (I'd suggest keeping this as low as possible, without seeing a stuttering parallax) | 5 |

Note:

Currently Firefox struggles to call the canvas drawImage method repeatedly. This causes the parallax effect to stutter on larger images / displays. To remedy this I have halved the dpr on Firefox. The "static" layer will render full resolution, while the parallax layers will render at half resolution. This is a temporary fix until I can find a better solution or Firefox fixes the issue. If you have any ideas please let me know.

I have personally found Firefox can perform well with a firefoxDPR multiplier value around 0.5 - 0.75. Any higher than this and the parallax effect will stutter at large scale. It's best to test this on your own project to find the best value for your needs as the lower the value the better the performance, but the image resolution will be lower.

This can be done by adjusting the dpr value based on the browser.

const firefoxDPR = 0.5;
const dpr = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) ? firefoxDPR : window.devicePixelRatio || 1;

new CarallaxController({ dpr });

License

MIT