2.0.2 • Published 4 years ago

vue-in-viewport-directive v2.0.2

Weekly downloads
1,104
License
MIT
Repository
github
Last release
4 years ago

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

    	```js
    	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):

    	```html
    	<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>
    	```
    	```css
    	.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.

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

    	```html
    	<div v-in-viewport='{ margin: "-100px 0px" }'></div>
    	```
  • Conditionally disable with disabled:
    	```html
    	<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

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

5 years ago

1.3.0

5 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago