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

scroll-follow-tab

v1.6.3

Published

Scroll follow tab implemented by javascript, no dependencies.

Downloads

13

Readme

Scroll Follow Tab

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

Install

  1. Via NPM:

Install NPM package - https://www.npmjs.com/package/scroll-follow-tab:

npm i scroll-follow-tab

Usages

Easy for using, Demo here: 👉 https://codesandbox.io/s/objective-tharp-3zwo8h?file=/src/App.js

or 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 do NOT include CSS.
  2. Added ID for 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 menuElement 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 | | ---------------------- | :------------------ | :----------- | :------------------------------------------------------- | | sectionClass | String | .scrollspy | Query selector to your sections | | menuActiveTarget | String | li > 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 menuActiveTarget | | scrollContainer | String, HTMLElement | empty string | User Defined Scrolling Container | | smoothScroll | Boolean, Object | false | Enable the smooth scrolling feature | | smoothScrollBehavior | Function | undefined | Define your smooth scroll behavior |

ES6 example

import scrollSpy from 'scroll-follow-tab'

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

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 a star if you feel that the library is helpful to you. It may save somebody a lot of trouble some day.

Helpful links

Licence

MIT