vue-in-viewport

1.2.3 • Public • Published

Vue in Viewport

Vue 3 plugin that bindes classes to an element if it appears in the client's viewport. The Plugin contains a lightweight, non-dependent Vue directive that is utilizing the intersection observer.

Installation

npm install vue-in-viewport

Usage

Import the Package as Vue plugin

import { createApp } from "vue";
import VueInViewport from "vue-in-viewport";

const app = createApp(/* Your main app component */);

// Use default options configuration
app.use(VueInViewport);

// Or provide custom options
app.use(VueInViewport, {
    classDefault: "in-viewport",
    delay: 300,
    // ... more options
});

// Mount your app to the DOM
app.mount("#app");

Add v-in-viewport to your desired element in your Vue template.

<template>
    <div v-in-viewport class="my-in-viewport-element">
        <!-- some content -->
    </div>
</template>

You can also set the options for every element individualy by parsing the options directly.

<template>
    <div v-in-viewport="{classDefault: 'in-viewport', delay: 300}" class="my-in-viewport-element">
        <!-- some content -->
    </div>
</template>

Options

Option Key Value Type Default Value Description
classDefault String in-viewport General identificator class.
classActive String is-in-viewport Class that's been added when visible in viewport.
classViewed String was-in-viewport Class that's been added when visible in viewport once.
offsetTop Number 0 Offset from top of the viewport in pixels.
offsetBottom Number 0 Offset from bottom of the viewport in pixels.
threshold Number 0 Percentage of the target element's visibility between 0 and 100 at which the class is binded.
triggerOnce Boolean false If true there won't be a viewport-check after once viewed to safe on performance.
delay Number 0 Sets a delay for the class binding in milliseconds.

Add Styling

Now you can add your custom CSS according to your needs.

In this case we create a fade-in effect for elements that apear in the viewport:

/* define your initial state with .in-viewport */
.in-viewport {
    transition: opacity 0.2s ease, transform 0.3s ease;
    transform: scale(0.8);
    opacity: 0;
}

/* add your visible state with .is-in-viewport for transitioning in and out
or use .was-in-viewport to transition in only once */
.is-in-viewport {
    transform: scale(1);
    opacity: 1;
}

Package Sidebar

Install

npm i vue-in-viewport

Weekly Downloads

7

Version

1.2.3

License

MIT

Unpacked Size

8.97 kB

Total Files

5

Last publish

Collaborators

  • jgastager