2.0.0 • Published 2 years ago

@three11/scrollspy v2.0.0

Weekly downloads
8
License
GPL-3.0
Repository
github
Last release
2 years ago

GitHub release GitHub issues GitHub last commit Github file size Build Status npm npm Analytics

ScrollSpy

Automatically update your navigation components based on scroll position to indicate which link is currently active in the viewport.

Install

npm i @three11/scrollspy

# or

yarn add @three11/scrollspy

or

Just download this repository and link the files located in dist folder:

<script src="path-to-scrollspy/dist/index.js"></script>

or

Include it from Unpkg CDN

<script src="//unpkg.com/@three11/scrollspy"></script>

Usage

First, import the module:

import ScrollSpy from '@three11/scrollspy';

Then initialize a new instance of the module:

const scrollSpy = new ScrollSpy(scrollSpySettings, scrollSpyEasings);

Settings

The default settings are:

NameTypeDescriptionDefault
headerClassstringThe class name of your Header element.c-header
headerOffsetbooleanFlag which indicates if the Header height should be calculatedtrue
animationSpeednumberSpeed of the scroll animation (in milliseconds)2000
animationEasingstringName of the easing function. For more details see beloweaseInOutQuint
sectionSelectorstringCSS selector for your Section elements.js-scroll-spy-section
linkCurrentClassstringClass name to be applied to the currently active linkcurrent
linksContainerSelectorstringCSS selector for your scroll spy navigation.js-scroll-spy-nav
onAfterScrollfunctionA function to run after the scroll after click on a link is complete() => {}

Easings

The ScrollSpy instance accepts a second optional argument which specifies a list of easing functions.

The current list contains several predefined easing functions:

{
    linear: t => t,
    easeInQuad: t => t * t,
    easeOutQuad: t => t * (2 - t),
    easeInCubic: t => t * t * t,
    easeOutCubic: t => --t * t * t + 1,
    easeInQuart: t => t * t * t * t,
    easeOutQuart: t => 1 - --t * t * t * t,
    easeInQuint: t => t * t * t * t * t,
    easeOutQuint: t => 1 + --t * t * t * t * t,
    easeInOutQuad: t => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),
    easeInOutCubic: t => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),
    easeInOutQuart: t => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t),
    easeInOutQuint: t => (t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t),
}

If you wish to add your own easing function, you can do so by adding it to the second argument of the ScrollSpy constructor.

Just remember that your custom easing function should accept a single time argument which is a number and should return a number.

In order to use your custom easing function, you need to specify its name in the animationEasing setting.

API

There are two public methods of the ScrollSpy instance.

The unbind method unbinds (removes) all of the event listeners and the bind method binds (adds) all of the event listeners.

These methods are useful in various cases - for example if you load the content of your pages with AJAX and you want to remove all possible memory leaks after you remove the ScrollSpy markup/HTML.

Here is how you can use them:

const scrollSpy = new ScrollSpy(scrollSpySettings, scrollSpyEasings);

// Later in your code
scrollSpy.unbind();

// Then, if you wish to re-enable the ScrollSpy functionality
scrollSpy.bind();

Example

new ScrollSpy(
	{
		linkCurrentClass: 'current',
		linksContainerSelector: '.nav',
		sectionSelector: '.section',
		headerOffset: true,
		headerClass: '.header',
		animationSpeed: 3000,
		animationEasing: 'customEasingFunction',
		onAfterScroll: () => {
			console.log('scroll ended');
		}
	},
	{
		customEasingFunction: t => t ** t
	}
);

Demo

A minimal demo is available here

License

GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007

2.0.0

2 years ago

1.0.0

3 years ago

0.4.0

5 years ago

0.3.0

6 years ago

0.2.0

6 years ago

0.1.0

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago