mercs600 / vue3-perfect-scrollbar

Vue.js wrapper for perfect scrollbar for version 3
MIT License
144 stars 22 forks source link

vue3-perfect-scrollbar

A minimalistic yet powerful Vue.js wrapper for Perfect Scrollbar.

πŸ” Considerations Before Using Custom Scrollbars

Before implementing custom scrollbars, consider their potential impact on user experience. Native scrollbar styling, as supported by browsers like Chromeoor Firefox often provides a good balance of customization without sacrificing usability. Check out Chrome's documentation on scrollbar styling to see if it meets your needs. If your project requires precise design alignment that native options can't provide, then vue3-perfect-scrollbar is a solid choice.

πŸ“¦ Installation

Using npm

npm install vue3-perfect-scrollbar

Using yarn

yarn add vue3-perfect-scrollbar

Using pnpm

pnpm add vue3-perfect-scrollbar

πŸ”Œ How to Use

Global Registration

πŸš€ Run on StackBlitz

Integrate vue3-perfect-scrollbar globally in your main application file:

import { createApp } from 'vue';
import { PerfectScrollbarPlugin } from 'vue3-perfect-scrollbar';
import 'vue3-perfect-scrollbar/style.css';
import App from './App.vue';

createApp(App).use(PerfectScrollbarPlugin).mount('#app');

Now, you can leverage the plugin in any component:

<PerfectScrollbar>
    <p> Lorem Ipsum is simply dummy text of the printing and typesetting industry. </p>
    <p> ... and much more content </p>
</PerfectScrollbar>

Customize the container height as needed:

/* example */
.ps {
  height: 400px; /* or max-height: 400px; */
}

Global Options

The install method accepts additional parameters:

app.use(PerfectScrollbarPlugin, {
    componentName: 'Scrollbar'
});

componentName {String}

The name of your global component.

Default: PerfectScrollbar

Local Registration

πŸš€ Run on StackBlitz

For local registration, import and declare the component within your Vue component file:

<script setup>
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
</script>

<template>
  <PerfectScrollbar>
    <p>content</p>
  </PerfectScrollbar>
</template>

<style>
@import 'vue3-perfect-scrollbar/style.css';

.ps {
  max-height: 100px; /* or height: 100px; */
}
</style>

βš™οΈ Props

Customize the Perfect Scrollbar with the following props:

tag?: string;
options?: PerfectScrollbar.Options;

tag? {String}

The tag that will be rendered as the Perfect Scrollbar container.

Default: div

options? {PerfectScrollbar.Options}: Options

Options for the Perfect Scrollbar library.

Explore Perfect Scrollbar options for further customization.

handlers?: string[];
maxScrollbarLength?: number;
minScrollbarLength?: number;
scrollingThreshold?: number;
scrollXMarginOffset?: number;
scrollYMarginOffset?: number;
suppressScrollX?: boolean;
suppressScrollY?: boolean;
swipeEasing?: boolean;
useBothWheelAxes?: boolean;
wheelPropagation?: boolean;
wheelSpeed?: number;

πŸ”„ Events

You can listen to all Perfect Scrollbar events.

πŸš€ Run on StackBlitz

Listen to all Perfect Scrollbar events. For a comprehensive list of events, visit Perfect Scrollbar events.

Example

<script setup>
import { PerfectScrollbar } from 'vue3-perfect-scrollbar';

function onScrollEvent(event) {
  console.log(event);
}
</script>

<template>
  <PerfectScrollbar @ps-scroll-y="onScrollEvent">
    <p>content</p>
  </PerfectScrollbar>
</template>

List of Event Keys

'scroll',
'ps-scroll-y',
'ps-scroll-x',
'ps-scroll-up',
'ps-scroll-down',
'ps-scroll-left',
'ps-scroll-right',
'ps-y-reach-start',
'ps-y-reach-end',
'ps-x-reach-start',
'ps-x-reach-end'

🧩 Access to PerfectScrollbar Instance.

To gain direct access to the Perfect Scrollbar instance and leverage its API within your Vue component, you can use the ref attribute.

πŸš€ Run on StackBlitz

<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { PerfectScrollbar } from 'vue3-perfect-scrollbar';
import type { PerfectScrollbarExpose } from 'vue3-perfect-scrollbar';
const scrollbarApi = ref<PerfectScrollbarExpose | null>(null);

onMounted(() => {
  if (scrollbarApi.value) {
    console.log(scrollbarApi.value.ps?.settings);
  }
})
</script>
<template>
  <PerfectScrollbar ref="scrollbarApi">
    <p>content</p>
  </PerfectScrollbar>
</template>

πŸ”Œ Use with Nuxt

πŸš€ Run on StackBlitz

Add to your nuxt.config.ts:

export default defineNuxtConfig({
  modules: ['vue3-perfect-scrollbar/nuxt']
});

πŸ†˜ Bug Reporting

Found a bug? Here's where to report it: