vue3-scroll-spy

91,723 26
Install
npm install vue3-scroll-spy
Latest Version:1.0.8
Vue:3
License:MIT
Last Updated:Apr 11, 2023
Links: GitHub  ·  npm
Maintainer: tridiamond

Demo | 📙 中文文档 | 📙 Changelog

Installation

npm i vue3-scroll-spy -S

OR

yarn add vue3-scroll-spy

Usage

Support

Supported Package Version
Vue 3+

Install Directive

// global register at main.js
import { registerScrollSpy } from '@/directives/ScrollSpy'

const app = createApp(App)
// Using default options
registerScrollSpy(app)

// or custom global options
registerScrollSpy(app, options)

app.mount('#app')

On template

<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>

Configuration

v-scroll-spy

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}

v-scroll-spy-active

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'}

v-scroll-spy-link

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'}

Bezier animations

import { registerScrollSpy, Easing } from '@/directives/ScrollSpy'

const app = createApp(App)

// or custom global options
registerScrollSpy(app, {
  easing: Easing.Cubic.In
})

app.mount('#app')

Note

  • You should have the same number of children elements for v-scroll-spy, v-scroll-spy-active, v-scroll-spy-link for 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.

Nested sections

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>

Liscense

MIT License

Version History

Version Released License
1.0.8 MIT
1.0.7 MIT
1.0.6 MIT
1.0.5 MIT
1.0.4 MIT