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

inview-detection

v1.0.7

Published

Inview Detection enables the creation of sequential animations based on in-view detection. Powered by GSAP.

Downloads

311

Readme

Inview Detection

Inview Detection enables the creation of sequential animations based on in-view detection. Powered by GSAP.

Features

  • Standalone elements
  • Scoping, bind elements to parent
  • Custom queuing and animations
  • Trigger callbacks
  • Conditional classes
  • Repeatable
  • Target specific screen sizes
  • Debugging mode
  • Lightweight (1.63 kB gzipped)

Dependencies

Ensure the following dependencies are installed and properly registered:

Quick start

Inview Detection requires the GSAP library as well as ScrollTrigger to function correctly. Ensure both are included before Inview Detection and registered within the instantiation.

Install from NPM

import { gsap } from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
import InviewDetection from 'inview-detection'

// Register ScrollTrigger plugin
gsap.registerPlugin(ScrollTrigger)

// Initialise InviewDetection and pass in gsap and ScrollTrigger
const inview = new InviewDetection(
	{
		/* options */
	},
	gsap,
	ScrollTrigger,
)

Delayed start (recommended)

To initialise the module without starting it immediately, set autoStart option to false.

// Create instance but do not start automatically
const inview = new InviewDetection(
	{
		autoStart: false,
	},
	gsap,
	ScrollTrigger,
)

// Start it when you are ready
document.addEventListener('DOMContentLoaded', () => {
	inview.start()
})

With autoStart disabled, for extra clarity inview.register can be used to register gsap and ScrollTrigger outside of the instantiation.

// Standard
const inview = new InviewDetection(
	{
		autoStart: false,
	},
	gsap,
	ScrollTrigger,
)

Optionally may be replaced with:

const inview = new InviewDetection({
	autoStart: false,
})

// Register gsap and ScrollTrigger separately
inview.register(gsap, ScrollTrigger)

Install from CDN

If you prefer to use a CDN, here is an example:

<!-- Include GSAP -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/ScrollTrigger.min.js"></script>

<!-- Include InviewDetection -->
<script src="https://cdn.jsdelivr.net/npm/inview-detection/bundled/index.min.js"></script>

<script>
	// Register ScrollTrigger plugin
	gsap.registerPlugin(ScrollTrigger)

	// Initialise InviewDetection and pass in gsap and ScrollTrigger
	const inview = new InviewDetection(
		{
			/* options */
		},
		gsap,
		ScrollTrigger,
	)
</script>

Options

You can configure Inview Detection via options:

const inview = new InviewDetection(
	{
		elements: '[data-inview]',
		autoStart: true,
		screen: '(min-width: 1025px)',
		duration: 1,
		delay: 0.1,
		start: 'top 90%',
		ease: 'power4',
		stagger: 0.08,
		animationFrom: {
			opacity: 0,
			'will-change': 'transform',
			y: 20,
		},
		animationTo: {
			opacity: 1,
			y: 0,
		},
		inviewClass: 'is-inview',
		viewedClass: 'has-viewed',
		debug: false,
	},
	gsap,
	ScrollTrigger,
)

All options:

| Name | Type | Default | Description | | :-------------- | :----: | :-----------------------: | :----------------------------------------------------------------------------------------------------------------------------------- | | elements | str | [data-inview] | What elements to apply inview animations to. | | autoStart | bool | true | Whether to start immediately. Set to false for a delayed start (recommended). | | screen | str | '(min-width: 1025px)' | Specify media query rules for animations. This can be overwritten on a per animation-basis. Set to all to remove queries entirely. | | duration | num | 1 | Duration of each animation. | | delay | num | .1 | Delay before animation starts. | | start | str | top 90% | ScrollTrigger's starting position for the animation. | | ease | str | power4 | Easing of animation (help). | | stagger | num | 0.08 | Time between each animation in the sequence. | | animationFrom | json | {"opacity": 0, "y": 20} | The initial state of each animation. | | animationTo | json | {"opacity": 1, "y": 0} | The final state of each animation. | | inviewClass | str | 'is-inview' | The class that is temporarily assigned to elements when they are within the viewport. | | viewedClass | str | 'has-viewed' | The class that is permanently assigned to elements when they have been within the viewport. | | debug | bool | false | Set debug mode to all instances. Enables markers and console logs. |

Attributes

Apply any of the following data attributes in conjunction with [data-inview] to enable custom animations.

  • scope for scoped elements within parent
  • child for child elements that should animate with parent
  • debug for enabling debugging markers and logs
  • order for specifying the order of animation
  • repeat for allowing repeat animations
  • from for setting animation from properties
  • to for setting animation to properties

Scope

Attribute: data-inview-scope Type: string

Specify the scope of nested elements using wildcards like *, > * or selectors .class, #id.

<div data-inview data-inview-scope="> *">
	<!-- All direct children will be considered for animation -->
</div>

Child

Attribute: data-inview-child

Apply attribute to elements that should animate when parent comes into view. The parent must have [data-inview] and [data-inview-scope] attributes.

<div data-inview data-inview-scope>
	<div data-inview-child>Child 1</div>
	<div data-inview-child>Child 2</div>
</div>

Debug

Attribute: data-inview-debug

Enable debugging markers and logs for animations.

<div data-inview data-inview-debug></div>

Order

Attribute: data-inview-order Type: number

Specify the order of animation for elements within a scope.

<div data-inview>
	<div data-inview-child data-inview-order="1">First</div>
	<div data-inview-child data-inview-order="2">Second</div>
</div>

Repeat

Attribute: data-inview-repeat

Allow animations to re-trigger when elements re-enter the viewport.

<div data-inview data-inview-repeat></div>

From / To

Attributes: data-inview-from, data-inview-to Type: json

Specify custom gsap.from() and gsap.to() properties for animations.

<div data-inview data-inview-from='{"opacity": 0, "y": 20}' data-inview-to='{"opacity": 1, "y": 0}'>
	Custom Animation
</div>

Methods

Start

Start Inview Detection to initialise animations, useful when autoStart is set to false.

inview.start()

Register GSAP

Register gsap and ScrollTrigger dependencies with InviewDetection.

inview.register(gsap, ScrollTrigger)

Refresh

Update ScrollTrigger calculations, useful if the page height changes.

inview.refresh()

Stop and fetch

Stop all animations and remove the ScrollTrigger instances.

/* Stop all animations */
inview.stop()

/* Stop a specific animation */
const element = document.querySelector('#myElement')
const trigger = inview.fetch(element)
inview.stop(trigger)

Restart

Stop and restart animations.

inview.restart()

Classes

| Class | Application | | :----------- | :----------------------------------------------------------- | | is-inview | Temporarily assigned to elements when they are in view. | | has-viewed | Permanently assigned to element when they have been in view. |

Events

Enter/Leave the viewport

Detect when elements enter or leave the viewport.

inview.on('onEnter', (element) => {
	console.log('Entering view:', element)
})
inview.on('onLeave', (element) => {
	console.log('Leaving view:', element)
})
inview.on('onEnterBack', (element) => {
	console.log('Re-entering view:', element)
})
inview.on('onLeaveBack', (element) => {
	console.log('Leaving view again:', element)
})

Refresh

Detect when the inview.refresh() method is fired.

inview.on('refresh', () => {
	console.log('Refreshed')
})

Stop

Detect when the inview.stop() method is fired.

inview.on('stop', (target) => {
	console.log('Stopped', target)
})

Restart

Detect when the inview.restart() method is fired.

inview.on('restart', () => {
	console.log('Restarted')
})

Examples of use

License

The MIT License (MIT)