vue-router-view-transition
Version:
A transition wrapper for router-view that is compatible with scrollBehavior
78 lines (55 loc) • 2.25 kB
Markdown
> A transition wrapper for router-view that is compatible with scrollBehavior
```sh
npm install vue-router-view-transition
yarn add vue-router-view-transition
```
This library exports one component and one function. You need to use both:
First, you can either globally install the component `RouterViewTransition`:
```js
import { RouterViewTransition } from 'vue-router-view-transition'
Vue.component('RouterViewTransition', RouterViewTransition)
```
or import it locally in any Vue component:
```js
import { RouterViewTransition } from 'vue-router-view-transition'
export default {
components: { RouterViewTransition },
}
```
Then you should replace your `router-view` with this `router-view-transition`:
```vue
<router-view-transition transition="fade" mode="out-in" />
```
Here the `transition` prop refers to the _name_ of the transition (prop named `name` for the `transition` component) while the `mode` is exactly the same as the prop with the same name in the `transition` component.
Then you must import the `waitForTransition` function and wrap your `scrollBehavior` function:
```js
// probably your router.js file
const router = new Router({
mode: 'history',
routes: [
// your routes
],
scrollBehavior: waitForTransition((to, from, savedPosition) => {
// this code will get executed only once the transition wrapping router-view is finished
// this ensures
if (savedPosition) {
return savedPosition
} else {
// this ensures we go to the top of the page when navigating to a new page
return { x: 0, y: 0 }
}
}),
})
```
**Note**: You may also want to enable _manual_ scroll restoration:
```js
history.scrollRestoration = 'manual'
```
- Vue Router: https://github.com/vuejs/vue-router
[](http://opensource.org/licenses/MIT)