Vue.js эффект перехода на страницу с помощью vue-router

Как добиться перехода страницы эффекта затухания между определенными страницами (компонентами) vue-router?

Ответы

Ответ 1

Оберните <router-view></router-view> с помощью <transition name="fade"></transition> и добавьте следующие стили:

.fade-enter-active, .fade-leave-active {
  transition-property: opacity;
  transition-duration: .25s;
}

.fade-enter-active {
  transition-delay: .25s;
}

.fade-enter, .fade-leave-active {
  opacity: 0
}

Подробный ответ

Предполагая, что вы создали свое приложение с помощью vue-cli, например:

vue init webpack fadetransition
cd fadetransition
npm install

Установите маршрутизатор:

npm i vue-router

Если вы не разрабатываете свое приложение с помощью vue-cli, обязательно добавьте маршрутизатор vue стандартным способом:

<script src="/path/to/vue.js"></script>
<script src="/path/to/vue-router.js"></script>

Вы можете использовать, например: https://unpkg.com/vue-router/dist/vue-router.js

CLI создал для вас базовое приложение, к которому вы можете добавить компоненты.

1) Создание компонентов страницы

В Vue компоненты (элементы пользовательского интерфейса) могут быть вложенными. Страница в вашем приложении может быть выполнена с помощью обычного компонента Vue, который рассматривается как корень для других компонентов на этой странице.

Перейдите в src/ и создайте каталог pages/. Эти корневые компоненты (отдельные страницы) будут помещены в этот каталог, а другие компоненты, используемые на фактических страницах, можно поместить в готовый каталог components/.

Создайте две страницы в файлах под названием src/pages/Page1.vue и src/pages/Page2.vue для стартеров. Их содержание будет (редактировать номера страниц соответственно):

<template>
  <h1>Page 1</h1>
</template>

<script>
export default {
}
</script>

<style scoped>
</style>

2) Настройка маршрутизации

Отредактируйте сгенерированный src/main.js добавьте требуемый импорт:

import VueRouter from 'vue-router'
import Page1 from './pages/Page1'
import Page2 from './pages/Page2'

Добавить глобальное использование маршрутизатора:

Vue.use(VueRouter)

Добавьте настройку маршрутизатора:

const router = new VueRouter({
  routes: [
    { path: '/page1', component: Page1 },
    { path: '/page2', component: Page2 },
    { path: '/', redirect: '/page1' }
  ]
})

Последний маршрут просто перенаправляет начальный путь / на /page1. Отредактируйте начало приложения:

new Vue({
  router,
  el: '#app',
  render: h => h(App)
})

Весь пример src/main.js находится в конце ответа.

3) Добавить представление маршрутизатора

Маршрутизация настроена к настоящему времени, отсутствует место, где будут отображаться компоненты страницы в соответствии с маршрутизатором. Это делается путем размещения <router-view></router-view> где-то в шаблонах, вы хотите поместить его в тег src/App.vue <template>.

Весь пример src/App.vue находится в конце ответа.

4) Добавьте эффект перехода от затухания между компонентами страницы

Оберните <router-view></router-view> с помощью элемента <transition name="fade">, например:

<template>
  <div id="app">
    <transition name="fade">
      <router-view></router-view>
    </transition>
  </div>
</template>

Vue выполнит эту работу здесь: он создаст и вставляет соответствующие классы CSS, начиная с имени, указанного через длительность эффекта, например: .fade-enter-active. Теперь определите эффекты в разделе App.vue:

<style>
.fade-enter-active, .fade-leave-active {
  transition-property: opacity;
  transition-duration: .25s;
}

.fade-enter-active {
  transition-delay: .25s;
}

.fade-enter, .fade-leave-active {
  opacity: 0
}
</style>

Что это. Если вы запустите приложение сейчас, например, с помощью npm run dev он автоматически отображает страницу с эффектом затухания. Если вы переписываете URL-адрес на страницу /page 2, он будет переключать страницы с эффектами постепенного исчезновения и затухания.

Ознакомьтесь с документацией по маршрутизации и transitions для получения дополнительной информации.

5) Дополнительно: добавьте ссылки на страницы.

Вы можете добавлять ссылки на определенные страницы с помощью компонента <router-link>, например:

<router-link to="/page1">Page 1</router-link>
<router-link to="/page2">Page 2</router-link>

Это автоматически дает ссылки a router-link-active class, если они активны, но вы также можете указать пользовательские классы, если вы используете, например. Bootstrap:

<router-link class="nav-link" active-class="active" to="/page1">Page 1</router-link>
<router-link class="nav-link" active-class="active" to="/page2">Page 2</router-link>

Файлы для справки

SRC/main.js:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import VueRouter from 'vue-router'

import App from './App'
import Page1 from './pages/Page1'
import Page2 from './pages/Page2'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    { path: '/page1', component: Page1 },
    { path: '/page2', component: Page2 },
    { path: '/', redirect: '/page1' }
  ]
})

/* eslint-disable no-new */
new Vue({
  router,
  el: '#app',
  render: h => h(App)
})

ЦСИ/App.vue:

<template>
  <div id="app">
    <router-link class="nav-link" active-class="active" to="/page1">Page 1</router-link>
    <router-link class="nav-link" active-class="active" to="/page2">Page 2</router-link>
    <transition name="fade">
      <router-view></router-view>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'app'
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition-property: opacity;
  transition-duration: .25s;
}

.fade-enter-active {
  transition-delay: .25s;
}

.fade-enter, .fade-leave-active {
  opacity: 0
}
</style>

SRC/страницы/Page1.vue:

<template>
  <h1>Page 1</h1>
</template>

<script>
export default {
}
</script>

<style scoped>
</style>

SRC/страницы/Page2.vue:

<template>
  <h1>Page 2</h1>
</template>

<script>
export default {
}
</script>

<style scoped>
</style>

Ответ 2

Существует также решение " vue-page-transition называемое vue-page-transition которое предлагает вам все виды transitions. (исчезновение, отражение, масштабирование, наложение и т.д.)

1 - Установите пакет npm:

yarn add vue-page-transition

2 - зарегистрировать плагин:

import Vue from 'vue'
import VuePageTransition from 'vue-page-transition'

Vue.use(VuePageTransition)

3 - оберните ваш router-view с глобальной анимацией:

<vue-page-transition name="fade-in-right">
  <router-view/>
</vue-page-transition>

Узнайте больше на GitHub: https://github.com/Orlandster/vue-page-transition