当前位置:首页 > VUE

vue实现切换路由动画

2026-02-21 21:59:06VUE

实现路由切换动画的基本方法

在Vue中实现路由切换动画通常结合<transition>组件和Vue Router完成。以下是一个基础实现示例:

<template>
  <transition name="fade" mode="out-in">
    <router-view></router-view>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态路由过渡效果

可以根据不同路由设置不同的过渡效果:

<template>
  <transition :name="transitionName">
    <router-view></router-view>
  </transition>
</template>

<script>
export default {
  data() {
    return {
      transitionName: 'slide-left'
    }
  },
  watch: {
    '$route'(to, from) {
      const toDepth = to.path.split('/').length
      const fromDepth = from.path.split('/').length
      this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
    }
  }
}
</script>

<style>
.slide-left-enter-active,
.slide-left-leave-active,
.slide-right-enter-active,
.slide-right-leave-active {
  transition: transform 0.5s;
}
.slide-left-enter {
  transform: translateX(100%);
}
.slide-left-leave-to {
  transform: translateX(-100%);
}
.slide-right-enter {
  transform: translateX(-100%);
}
.slide-right-leave-to {
  transform: translateX(100%);
}
</style>

使用CSS动画库

结合Animate.css等CSS动画库可以快速实现丰富效果:

<template>
  <transition
    enter-active-class="animate__animated animate__fadeIn"
    leave-active-class="animate__animated animate__fadeOut"
    mode="out-in"
  >
    <router-view></router-view>
  </transition>
</template>

<script>
import 'animate.css'
</script>

基于路由元信息的动画控制

通过路由配置中的meta字段控制不同路由的动画:

// router.js
{
  path: '/home',
  component: Home,
  meta: {
    transition: 'zoom'
  }
}

// App.vue
<template>
  <transition :name="$route.meta.transition || 'fade'">
    <router-view></router-view>
  </transition>
</template>

实现3D翻转动画

创建更复杂的3D过渡效果:

vue实现切换路由动画

<template>
  <transition name="flip" mode="out-in">
    <router-view></router-view>
  </transition>
</template>

<style>
.flip-enter-active {
  animation: flip-in 0.5s ease-out;
}
.flip-leave-active {
  animation: flip-out 0.5s ease-out;
}
@keyframes flip-in {
  0% {
    transform: rotateY(90deg);
    opacity: 0;
  }
  100% {
    transform: rotateY(0deg);
    opacity: 1;
  }
}
@keyframes flip-out {
  0% {
    transform: rotateY(0deg);
    opacity: 1;
  }
  100% {
    transform: rotateY(90deg);
    opacity: 0;
  }
}
</style>

注意事项

  • 使用mode="out-in"确保当前组件先完成离开动画,新组件再开始进入动画
  • 动画性能优化:优先使用CSS transforms和opacity属性,避免触发重排
  • 移动端考虑:简化复杂动画以保证性能
  • 可访问性:确保动画不会影响用户操作体验

标签: 路由动画
分享给朋友:

相关文章

vue路由实现介绍

vue路由实现介绍

Vue 路由实现介绍 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。它通过动态映射组件到路由实现页面无刷新切换,同时支持嵌套路由、路由参数、导航守卫等高级功能…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载 i…

elementui动画

elementui动画

ElementUI 动画使用指南 ElementUI 提供了内置的过渡动画效果,主要通过 Vue 的 <transition> 组件实现。以下为常见动画应用方法: 淡入淡出动画 通过 e…

vue实现的动画

vue实现的动画

Vue 动画实现方式 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接使用 CSS 动画。以下是几种常见的实现方法: 使用 Vue 过渡系统 Vue 的 <tra…

vue实现路由组件

vue实现路由组件

Vue 实现路由组件的方法 在 Vue 中实现路由功能通常需要结合 Vue Router 库,以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router…

vue实现登录路由

vue实现登录路由

Vue 登录路由实现方法 路由配置 在 router/index.js 中配置登录路由和需要权限的路由。使用 meta 字段标记需要认证的路由。 import Vue from 'vue' impo…