Skip to content

A lightweight JavaScript library to automatically update navigation components based on scroll position indicating the currently active link in the viewport. Works with sections and documents structured by headlines only

License

Notifications You must be signed in to change notification settings

3kraft/scrollspy

 
 

Repository files navigation

@sidsbrmnn/scrollspy

npm version

A simple lightweight JavaScript library without jQuery or any other dependencies to handle scroll spying on static webpages.

Install

  1. via NPM

    Install it using npm

    npm install --save @sidsbrmnn/scrollspy
  2. Use the minified script from unpkg.com

    <script src="https://unpkg.com/@sidsbrmnn/scrollspy@1.x/dist/scrollspy.min.js"></script>

Usages

Easy for using, syntax just like this:

scrollSpy(menu, options)

This little plugin will add active class into your existing menu item when you scroll your page to a matched section by ID. If you are giving it a try, make sure that you:

  1. Added CSS for active class in your menu item. Because, this plugin do NOT include CSS.

  2. Create your sections.

    Example: <section id="first-section">...</section>

  3. Added an attribute which is an section ID into your menu items. Default is href.

    Example: "href"="#first-section". You also replace href with the other name by hrefAttribute in options.

Arguments

  1. The menu is query selector to your menu. It is string or HTMLElement instance.

  2. The options is optional. It is type of object which contains properties below:

Name Type Default Description
sectionType string section Type of your sections. 'headline' means that your content is structured by headlines in a semantic way and not wrapped in a parent section element.
sectionSelector string section Query selector to your sections
targetSelector string a Element will be added active class
offset number 0 Offset number
hrefAttribute string href The menu item's attribute name which contains section ID
activeClass string active Active class name will be added into targetSelector
onActive function null A callback method that's called with the current menuItem and section onActive: function(menuItem, section) {}

ES6

import scrollSpy from '@sidsbrmnn/scrollspy'

const options = {
    sectionSelector: 'section',  // Query selector to your sections
    targetSelector: '.nav-link', // Query selector to your elements that will be added `active` class
    offset: 100                  // Menu item will active before scroll to a matched section 100px
}

// Initialize
scrollSpy(document.getElementById('navMain'), options)

// Shorter way
scrollSpy('#navMain', options)

Script tag

<script src="/path/to/dist/scrollspy.min.js"></script>
<script>
    window.onload = function () {
        scrollSpy('#navMain', {
            sectionSelector: 'section',
            targetSelector: '.nav-link',
            offset: 100
        });
    }

</script>

Licence

MIT

About

A lightweight JavaScript library to automatically update navigation components based on scroll position indicating the currently active link in the viewport. Works with sections and documents structured by headlines only

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%