What is vue-scrollto?
vue-scrollto is a Vue.js directive that allows you to smoothly scroll to elements within your application. It provides a simple and flexible way to implement scrolling animations, making it easier to navigate through different sections of a page.
What are vue-scrollto's main functionalities?
Basic Usage
This feature allows you to scroll to a specific element on the page by using the v-scroll-to directive. In this example, clicking the button will smoothly scroll to the element with the id 'element'.
<template>
<div>
<button v-scroll-to="'#element'">Scroll to Element</button>
<div id="element" style="margin-top: 1000px;">Target Element</div>
</div>
</template>
<script>
import VueScrollTo from 'vue-scrollto';
export default {
directives: {
scrollTo: VueScrollTo.directive
}
};
</script>
Custom Duration
This feature allows you to customize the duration of the scroll animation. In this example, the scroll to the target element will take 1000 milliseconds (1 second).
<template>
<div>
<button v-scroll-to="{ el: '#element', duration: 1000 }">Scroll to Element</button>
<div id="element" style="margin-top: 1000px;">Target Element</div>
</div>
</template>
<script>
import VueScrollTo from 'vue-scrollto';
export default {
directives: {
scrollTo: VueScrollTo.directive
}
};
</script>
Offset
This feature allows you to set an offset for the scroll position. In this example, the scroll will stop 50 pixels before the target element.
<template>
<div>
<button v-scroll-to="{ el: '#element', offset: -50 }">Scroll to Element</button>
<div id="element" style="margin-top: 1000px;">Target Element</div>
</div>
</template>
<script>
import VueScrollTo from 'vue-scrollto';
export default {
directives: {
scrollTo: VueScrollTo.directive
}
};
</script>
Easing
This feature allows you to specify an easing function for the scroll animation. In this example, the 'ease-in-out' easing function is used to create a smooth scroll effect.
<template>
<div>
<button v-scroll-to="{ el: '#element', easing: 'ease-in-out' }">Scroll to Element</button>
<div id="element" style="margin-top: 1000px;">Target Element</div>
</div>
</template>
<script>
import VueScrollTo from 'vue-scrollto';
export default {
directives: {
scrollTo: VueScrollTo.directive
}
};
</script>
Other packages similar to vue-scrollto
vue-scroll
vue-scroll is another Vue.js directive for smooth scrolling. It offers similar functionality to vue-scrollto but with a different API. It allows you to scroll to elements with various options for duration, offset, and easing.
vue-scroll-behavior
vue-scroll-behavior is a Vue.js plugin that provides smooth scrolling behavior for route navigation. It is more focused on handling scroll positions when navigating between different routes in a Vue application, whereas vue-scrollto is more general-purpose.
vue-smooth-scroll
vue-smooth-scroll is a lightweight Vue.js plugin for smooth scrolling to elements. It offers basic smooth scrolling functionality with a simple API, similar to vue-scrollto, but with fewer customization options.
vue-scrollto
DEMO
Scrolling to elements was never this easy!
This is for vue 2.x
For vue 1.x
use vue-scrollTo@1.0.1
(note the capital T) but keep in mind that the old version depends on jquery
.
Under the hood
vue-scrollto
uses window.requestAnimationFrame
to perform the animations, thus giving the best performance.
Easing is done using bezier-easing - A well tested easing micro-library.
It even knows when the user interrupts, and doesn't force scrolling that would result in bad UX.
Installing
This package is available on npm.
If you used this package before, please ensure you are using the right one, since it has been renamed from `vue-scrollTo` to `vue-scrollto`
Using npm:
npm install --save vue-scrollto
Using yarn:
yarn add vue-scrollto
Directly include it in html:
<script src="https://unpkg.com/vue@2.2.4"></script>
<script src="https://unpkg.com/vue-scrollto"></script>
When including it in html, it will automatically call `Vue.use` and also set a `VueScrollTo` variable that you can use!
Usage
vue-scrollto can be used either as a vue directive, or programatically from your javascript.
As a vue directive
var Vue = require('vue');
var VueScrollTo = require('vue-scrollto');
Vue.use(VueScrollTo)
<a href="#" v-scroll-to="'#element'">Scroll to #element</a>
<div id="element">
Hi. I'm #element.
</div>
If you need to customize the scrolling options, you can pass in an object literal to the directive:
<a href="#" v-scroll-to="{
el: '#element',
container: '#container',
duration: 500,
easing: 'linear',
offset: -200,
onDone: onDone,
onCancel: onCancel
}">
Scroll to #element
</a>
Check out the [Options Section](#options) for more details about the available options.
Programatically
var VueScrollTo = require('vue-scrollto');
var options = {
container: '#container',
easing: vueScrollto.easing['ease-in'],
offset: -60,
onDone: function() {
},
onCancel: function() {
}
}
VueScrollTo.scrollTo(element, duration, options)
Options
el / element
The element you want to scroll to.
container
The container that has to be scrolled.
Default: body
duration
The duration (in milliseconds) of the scrolling animation.
Default: 1000
easing
The easing to be used when animating. Read more in the Easing section.
Default: ease
offset
The offset that should be applied when scrolling.
Default: 0
onDone
A callback function that should be called when scrolling has ended.
Default: noop
onCancel
A callback function that should be called when scrolling has been aborted by the user (user scrolled, clicked etc.).
Default: noop
Easing
Easing is calculated using bezier-easing so you can pass your own values into options.easing
in the form of an array with 4 values.
vue-scrollto defines the following easings that you can use:
exports.easing = {
'ease': [0.25, 0.1, 0.25, 1.0],
'linear': [0.00, 0.0, 1.00, 1.0],
'ease-in': [0.42, 0.0, 1.00, 1.0],
'ease-out': [0.00, 0.0, 0.58, 1.0],
'ease-in-out': [0.42, 0.0, 0.58, 1.0]
}
License
MIT