Scrollspy and animated scroll-to for Vue3, inspired by vue2-scrollspy. 
  —— Made with ❤️ by Benny Guo
npm i vue3-scroll-spy -SOR
yarn add vue3-scroll-spy| Supported Package | Version | 
|---|---|
| Vue | 3+ | 
// global register at main.js
import { registerScrollSpy } from 'vue3-scroll-spy';
const app = createApp(App)
// Using default options
registerScrollSpy(app)
// or custom global options
registerScrollSpy(app, options)
app.mount('#app')<ul v-scroll-spy-active v-scroll-spy-link>
  <li>
    <a>Menu 1</a>
  </li>
  <li>
    <a>Menu 2</a>
  </li>
</ul>
<div v-scroll-spy>
  <div>
    <h1>Header 1</h1>
    <p>Content</p>
  </div>
  <div>
    <h1>Header 2</h1>
    <p>Content</p>
  </div>
</div>Binding scroll-spy to sections (or elements) of a container.
| Directive name | Description | Default | 
|---|---|---|
v-scroll-spy="{allowNoActive: true}" | 
When scroll position is outside of the container, active class will be removed. | Keep one section stays active at all time. | 
v-scroll-spy="{offset: 50}" | 
TAdding offset to scroll and active elements. | Default: 0 | 
v-scroll-spy="{time: 200, steps: 30}" | 
Set the animation options, time is animation duration, steps is step per frame. | {time: 200, steps: 30} | 
Setting active elements' selector and class properties.
| Directive name | Description | Default | 
|---|---|---|
v-scroll-spy-active="{selector: 'li.menu-item', class: 'custom-active'}" | 
Customize elements selector and class name. | {selector: null, class: 'active'} | 
Add click handler on children elements allow scrolling to the related section.
| Directive name | Description | Default | 
|---|---|---|
v-scroll-spy-link="{selector: 'a.menu-link'}" | 
Customize menu links selector. | {selector: null, class: 'active'} | 
import { registerScrollSpy, Easing } from '@/directives/ScrollSpy'
const app = createApp(App)
// or custom global options
registerScrollSpy(app, {
  easing: Easing.Cubic.In
})
app.mount('#app')- You should have the same number of children elements for 
v-scroll-spy,v-scroll-spy-active,v-scroll-spy-linkfor this directive to work correctly. - If you need to share this scroll-spy directive on multiple containers, you can add 
data-scroll-spy-id=""on each element container, where this directive is bind. 
Vue3 Scroll-Spy also support multi-leveled sections:
<ol
  v-scroll-spy
  v-scroll-spy-active="{selector: 'li.menu-item', class: 'active'}"
>
  <li class="menu-item">Item 1</li>
  <li class="menu-item">
    Item 2
    <ol>
      <li class="menu-item">Item 2.1</li>
      <li class="menu-item">Item 2.2</li>
    </ol>
  </li>
</ol>MIT License
