All Projects → BKWLD → Vue In Viewport Directive

BKWLD / Vue In Viewport Directive

Licence: mit
Vue 2 directive that adds css classes when the element is the viewport

Programming Languages

javascript
184084 projects - #8 most used programming language

Vue In Viewport Directive Build Status

Vue 2 directive that sets CSS classes on its host element based on the elements current position in the viewport. These classes are:

  • in-viewport - Some part of the element is within the viewport
  • above-viewport - Some part of the element is above the viewport
  • below-viewport - Some part of the element is below the viewport

You may want to check out the mixin version of this package: vue-in-viewport-mixin.

Demo: https://bkwld.github.io/vue-in-viewport-directive

Usage

Note, this should not be applied to elements / components that are setting a dynamic class through Vue. See this issue.

  • Register the directive:

     import Vue from 'vue'
     import inViewportDirective from 'vue-in-viewport-directive'
     Vue.directive('in-viewport', inViewportDirective)
    
  • Use the classes to trigger CSS transitions (for instance):

     <div class='box' v-in-viewport></div>
     <div class='box' v-in-viewport.once='-100px 0px'></div>
     <div class='box' v-in-viewport.once='{ margin: "-10% 0%" }'></div>
    
     .box {
     	opacity: 0;
     	transition: opacity .3s;
     }
     .box.in-viewport {
     	opacity: 1;
     }
    
  • Set default offsets:

import inViewportDirective from 'vue-in-viewport-directive'
inViewportDirective.defaults.margin = '-10% 0%'
Vue.directive('in-viewport', inViewportDirective)

Global methods

You can disable all updates and re-enable them globally:

import { enable, disable } from 'vue-in-viewport-directive'
disable()
setTimeout(enable, 500)

This can be used during full page transitions to trigger all the in viewport transitions only once the page transition finishes.

Arguments

Modifiers

  • once - Whether to remove listeners once the element enters viewport. If the element is in viewport when mounted, listeners are never added.

Value

  • Set the value to a string in the style of IntersectionObserver rootMargin to apply an offset to when the in viewport classes get added.

     <div v-in-viewport="'-100px 0px'"></div>
    
  • Or, set it via an option:

     <div v-in-viewport='{ margin: "-100px 0px" }'></div>
    
  • Conditionally disable with disabled:

     <div v-in-viewport='{ disabled: true }'></div>
    

Tests

  1. Start Storybook: yarn storybook
  2. Open Cypress: yarn cypress open

The Travis tests that run on deploy run against the demo site which gets updated as part of the npm version

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].