2.5.3 • Published 10 months ago

simple-scrollspy v2.5.3

Weekly downloads
127
License
MIT
Repository
github
Last release
10 months ago

Simple Scrollspy

NPM version

Simple scrollspy is a lightweight javascript library without jQuery, no dependencies. It is used to make scrollspy effect for your menu, table of contents, etc. Only 1.4Kb.

Examples:

Install

Using NPM package

Install NPM package - https://www.npmjs.com/package/simple-scrollspy:

npm install simple-scrollspy

Using CDNjs

The simple-scrollspy is already on CDNjs. Therefore, you can: 1. Go to https://cdnjs.com/libraries/simple-scrollspy 2. Choose a version 3. Click Copy Script Tag, CDNjs will generate the script and copy them to your clipboard. For example:

<script src="https://cdnjs.cloudflare.com/ajax/libs/simple-scrollspy/2.4.1/simple-scrollspy.min.js" integrity="sha512-NNb5TgmE+7PHedvAWwPKZ/ukCGJciTHZ23ghPriEeEfcGySDBm9zIrjaXp/WNAUcVYhi5XhJ1rHveDKR35CInw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Using simple-scrollspy.min.js file

You can download simple-scrollspy.min.js file on each release. Please check the latest version.

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

Usages

Easy for using, syntax just like this:

scrollSpy(menuElement, 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 doesn't include CSS. 2. Added ID for your sections. Example: <section id="first-section">...</section> 3. Added an attribute which is a section ID into your menu items. The default value is href. Example: "href"="#first-section". You also replace href with the other name by hrefAttribute in options.

Arguments

  1. The menuElement is a query selector for your menu. It is String or HTMLElement instance.
  2. The options is optional. It types of Object contains the properties below:
NameTypeDefaultDescription
sectionClassString.scrollspyQuery selector to your sections
menuActiveTargetStringli > aElement will be added active class
offsetNumber0Offset number
hrefAttributeStringhrefThe menu item's attribute name which contains section ID
activeClassStringactiveActive class name will be added into menuActiveTarget
scrollContainerString, HTMLElementwindowUser Defined Scrolling Container
smoothScrollBoolean, ObjectfalseEnable the smooth scrolling feature
smoothScrollBehaviorFunctionundefinedDefine your smooth scroll behavior
onActiveFunctionundefinedTrigger after the menu item is added the activeClass class

ES6 example

import scrollSpy from 'simple-scrollspy'

const options = {
  sectionClass: '.scrollspy',           // Query selector to your sections
  menuActiveTarget: '.menu-item',       // Query selector to your elements that will be added `active` class
  offset: 100,                          // Menu item will active before scroll to a matched section 100px
  scrollContainer: '.scroll-container', // Listen scroll behavior on `.scroll-container` instead of `window`
}

// init:
scrollSpy(document.getElementById('main-menu'), options)

// or shorter:
scrollSpy('#main-menu', options)

Inject static file

<script src="/path/to/dist/simple-scrollspy.min.js"></script>
<script>
  window.onload = function () {
    scrollSpy('#main-menu', {
      sectionClass: '.scrollspy',
      menuActiveTarget: '.menu-item',
      offset: 100,
      // smooth scroll
      smoothScroll: true,
      smoothScrollBehavior: function(element) {
        console.log('run "smoothScrollBehavior"...', element)
        element.scrollIntoView({ behavior: 'smooth' }) // default behavior
      }
    })
  }
</script>

Smooth scroll

import jumpTo from 'jump.js'

scrollSpy('#main-menu', {
  // ....,

  // enable smooth scroll:
  // - true: enable with the default scroll behavior
  // - false: disable this feature
  // - object: enable with some options that will pass to `Element.scrollIntoView` or `smoothScrollBehavior`
  //   + Default behavior: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
  //   + Jump.js: https://www.npmjs.com/package/jump.js
  smoothScroll: true,

  // customize scroll behavior,
  // - default: Element.scrollIntoView({ ...smoothScroll, behavior: 'smooth' })
  // - customize: you can define your scroll behavior. Ex: use `jump.js`, jQuery, .etc
  smoothScrollBehavior: function(element, options) {
    // use `jump.js` instead of the default scroll behavior
    jumpTo(element, {
      duration: 1000,
      offset: -100,
    })
  }
})

Development

$ yarn install
$ yarn dev

Build

$ yarn build

or:

$ npm run build

The dist folder is automatically created and includes the file simple-scrollspy.min.js

Note

  • Feel free to make a pull request if you can, and create a Github Issue if you come across one.
  • Don't forget to give it a star if you feel that the library is helpful to you. It may save somebody a lot of trouble someday.

Support / Donate

Helpful links

Licence

MIT

2.5.2

10 months ago

2.5.1

10 months ago

2.5.3

10 months ago

2.5.0

1 year ago

2.4.2

2 years ago

2.4.1

2 years ago

2.4.0

2 years ago

2.3.4

2 years ago

2.3.6

2 years ago

2.3.5

2 years ago

2.3.3

3 years ago

2.3.0

3 years ago

2.3.2

3 years ago

2.3.1

3 years ago

2.2.0

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.3

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.0.2

6 years ago

1.0.1

7 years ago

1.0.0

7 years ago