Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@three11/scrollspy

Package Overview
Dependencies
Maintainers
2
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@three11/scrollspy

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

  • 2.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
2
Created
Source

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

Keywords

FAQs

Package last updated on 12 Jan 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc